1
0
mirror of https://github.com/django/django.git synced 2024-12-23 01:25:58 +00:00

Fixed #26145 -- Made debug context processor return queries for all databases.

This commit is contained in:
Mounir Messelmeni 2016-04-09 14:09:08 +02:00 committed by Tim Graham
parent 9e3f141701
commit 03e1cc930c
6 changed files with 27 additions and 5 deletions

View File

@ -9,6 +9,8 @@ of a DjangoTemplates backend and used by RequestContext.
from __future__ import unicode_literals from __future__ import unicode_literals
import itertools
from django.conf import settings from django.conf import settings
from django.middleware.csrf import get_token from django.middleware.csrf import get_token
from django.utils.encoding import smart_text from django.utils.encoding import smart_text
@ -40,10 +42,13 @@ def debug(request):
context_extras = {} context_extras = {}
if settings.DEBUG and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS: if settings.DEBUG and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:
context_extras['debug'] = True context_extras['debug'] = True
from django.db import connection from django.db import connections
# Return a lazy reference that computes connection.queries on access, # Return a lazy reference that computes connection.queries on access,
# to ensure it contains queries triggered after this function runs. # 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 return context_extras

View File

@ -699,8 +699,13 @@ the request's IP address (``request.META['REMOTE_ADDR']``) is in the
you're in :setting:`DEBUG` mode. you're in :setting:`DEBUG` mode.
* ``sql_queries`` -- A list of ``{'sql': ..., 'time': ...}`` dictionaries, * ``sql_queries`` -- A list of ``{'sql': ..., 'time': ...}`` dictionaries,
representing every SQL query that has happened so far during the request 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 and how long it took. The list is in order by database alias and then by
on access. 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`` ``django.template.context_processors.i18n``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -414,6 +414,9 @@ Templates
* Allowed :tfilter:`dictsort` to order a list of lists by an element at a * Allowed :tfilter:`dictsort` to order a list of lists by an element at a
specified index. specified index.
* The :func:`~django.template.context_processors.debug` context processor
contains queries for all database aliases instead of only the default alias.
Tests Tests
~~~~~ ~~~~~

View File

@ -12,4 +12,8 @@ Second query list: {{ sql_queries|length }}
Third 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 %} {% endif %}

View File

@ -87,3 +87,5 @@ class DebugContextProcessorTests(TestCase):
self.assertContains(response, 'Second query list: 1') self.assertContains(response, 'Second query list: 1')
# Check we have not actually memoized connection.queries # Check we have not actually memoized connection.queries
self.assertContains(response, 'Third query list: 2') self.assertContains(response, 'Third query list: 2')
# Check queries for DB connection 'other'
self.assertContains(response, 'Fourth query list: 3')

View File

@ -8,5 +8,8 @@ def request_processor(request):
def debug_processor(request): def debug_processor(request):
context = {'debug_objects': DebugObject.objects} context = {
'debug_objects': DebugObject.objects,
'other_debug_objects': DebugObject.objects.using('other'),
}
return render(request, 'context_processors/debug.html', context) return render(request, 'context_processors/debug.html', context)