Loading django/template/context_processors.py +7 −2 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ of a DjangoTemplates backend and used by RequestContext. from __future__ import unicode_literals import itertools from django.conf import settings from django.middleware.csrf import get_token from django.utils.encoding import smart_text Loading Loading @@ -40,10 +42,13 @@ def debug(request): context_extras = {} if settings.DEBUG and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS: context_extras['debug'] = True from django.db import connection from django.db import connections # Return a lazy reference that computes connection.queries on access, # to ensure it contains queries triggered after this function runs. context_extras['sql_queries'] = lazy(lambda: connection.queries, list) context_extras['sql_queries'] = lazy( lambda: list(itertools.chain(*[connections[x].queries for x in connections])), list ) return context_extras Loading docs/ref/templates/api.txt +7 −2 Original line number Diff line number Diff line Loading @@ -699,8 +699,13 @@ the request's IP address (``request.META['REMOTE_ADDR']``) is in the you're in :setting:`DEBUG` mode. * ``sql_queries`` -- A list of ``{'sql': ..., 'time': ...}`` dictionaries, representing every SQL query that has happened so far during the request and how long it took. The list is in order by query and lazily generated on access. and how long it took. The list is in order by database alias and then by query. It's lazily generated on access. .. versionchanged:: 1.10 In older versions, only the queries for the default database alias were included. ``django.template.context_processors.i18n`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Loading docs/releases/1.10.txt +3 −0 Original line number Diff line number Diff line Loading @@ -414,6 +414,9 @@ Templates * Allowed :tfilter:`dictsort` to order a list of lists by an element at a specified index. * The :func:`~django.template.context_processors.debug` context processor contains queries for all database aliases instead of only the default alias. Tests ~~~~~ Loading tests/context_processors/templates/context_processors/debug.html +4 −0 Original line number Diff line number Diff line Loading @@ -12,4 +12,8 @@ Second query list: {{ sql_queries|length }} Third query list: {{ sql_queries|length }} {% for obj in other_debug_objects.all %}{{ obj }}{% endfor %} Fourth query list: {{ sql_queries|length }} {% endif %} tests/context_processors/tests.py +2 −0 Original line number Diff line number Diff line Loading @@ -87,3 +87,5 @@ class DebugContextProcessorTests(TestCase): self.assertContains(response, 'Second query list: 1') # Check we have not actually memoized connection.queries self.assertContains(response, 'Third query list: 2') # Check queries for DB connection 'other' self.assertContains(response, 'Fourth query list: 3') Loading
django/template/context_processors.py +7 −2 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ of a DjangoTemplates backend and used by RequestContext. from __future__ import unicode_literals import itertools from django.conf import settings from django.middleware.csrf import get_token from django.utils.encoding import smart_text Loading Loading @@ -40,10 +42,13 @@ def debug(request): context_extras = {} if settings.DEBUG and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS: context_extras['debug'] = True from django.db import connection from django.db import connections # Return a lazy reference that computes connection.queries on access, # to ensure it contains queries triggered after this function runs. context_extras['sql_queries'] = lazy(lambda: connection.queries, list) context_extras['sql_queries'] = lazy( lambda: list(itertools.chain(*[connections[x].queries for x in connections])), list ) return context_extras Loading
docs/ref/templates/api.txt +7 −2 Original line number Diff line number Diff line Loading @@ -699,8 +699,13 @@ the request's IP address (``request.META['REMOTE_ADDR']``) is in the you're in :setting:`DEBUG` mode. * ``sql_queries`` -- A list of ``{'sql': ..., 'time': ...}`` dictionaries, representing every SQL query that has happened so far during the request and how long it took. The list is in order by query and lazily generated on access. and how long it took. The list is in order by database alias and then by query. It's lazily generated on access. .. versionchanged:: 1.10 In older versions, only the queries for the default database alias were included. ``django.template.context_processors.i18n`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Loading
docs/releases/1.10.txt +3 −0 Original line number Diff line number Diff line Loading @@ -414,6 +414,9 @@ Templates * Allowed :tfilter:`dictsort` to order a list of lists by an element at a specified index. * The :func:`~django.template.context_processors.debug` context processor contains queries for all database aliases instead of only the default alias. Tests ~~~~~ Loading
tests/context_processors/templates/context_processors/debug.html +4 −0 Original line number Diff line number Diff line Loading @@ -12,4 +12,8 @@ Second query list: {{ sql_queries|length }} Third query list: {{ sql_queries|length }} {% for obj in other_debug_objects.all %}{{ obj }}{% endfor %} Fourth query list: {{ sql_queries|length }} {% endif %}
tests/context_processors/tests.py +2 −0 Original line number Diff line number Diff line Loading @@ -87,3 +87,5 @@ class DebugContextProcessorTests(TestCase): self.assertContains(response, 'Second query list: 1') # Check we have not actually memoized connection.queries self.assertContains(response, 'Third query list: 2') # Check queries for DB connection 'other' self.assertContains(response, 'Fourth query list: 3')