#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.