#23364: sql_queries from debug template context processor always empty
-------------------------------+------------------------------------
     Reporter:  Markush2010    |                    Owner:  nobody
         Type:  Bug            |                   Status:  new
    Component:  HTTP handling  |                  Version:  master
     Severity:  Normal         |               Resolution:
     Keywords:                 |             Triage Stage:  Accepted
    Has patch:  0              |      Needs documentation:  0
  Needs tests:  0              |  Patch needs improvement:  0
Easy pickings:  0              |                    UI/UX:  0
-------------------------------+------------------------------------
Changes (by aaugustin):

 * needs_better_patch:   => 0
 * needs_docs:   => 0
 * component:  Uncategorized => HTTP handling
 * needs_tests:   => 0
 * stage:  Unreviewed => Accepted


Comment:

 This is interesting.

 Here's the relevant template from the sample project. `mymodels` is a
 queryset and it isn't evaluated yet. `sql_queries` is set to
 `connection.queries` in the `debug` context processor.

 {{{
 {% for mymodel in mymodels %}
   <li>{{ mymodel.foo }}</li>
 {% endfor %}
 <pre>
 {{ sql_queries }}
 {{ sql_queries|length }}
 </pre>
 }}}

 In Django 1.7, `connection.queries` is a list that gets updated with each
 new database query. If you print the list in the context processor, it's
 empty. But by the time you reach `{{ sql_queries }}` in the template, `{%
 for mymodel in mymodels %}` has triggered a query, and `{{ sql_queries }}`
 contains that query.

 In Django pre-1.8, `connection.queries` is a snapshot of the ring buffer
 that prevents unlimited memory consumption in long running processes. Once
 the snapshot is made, it isn't updated with new database queries. As a
 consequence, it's still empty when reaching `{{ sql_queries }}` in the
 template.

 I'm not sure what to do. Since it's common to have database queries
 triggered by templates in Django projects, this unintentional change of
 behavior will be considered a regression by most users. But having `{{
 sql_queries }}` return different values depending on where you put it in
 the template isn't a good API either.

--
Ticket URL: <https://code.djangoproject.com/ticket/23364#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/069.765cc5de45fefceab4a0a56ede09f229%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to