#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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
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