diff --git a/README.rst b/README.rst index c80e005a2..8d2d5a06d 100644 --- a/README.rst +++ b/README.rst @@ -3,7 +3,7 @@ Django Debug Toolbar ==================== The Django Debug Toolbar is a configurable set of panels that display various -debug information about the current request/response and when clicked, display +debug information about the current request/response and when clicked, display more details about the panel's content. Currently, the following panels have been written and are working: @@ -32,8 +32,8 @@ Installation Tying into middleware allows each panel to be instantiated on request and rendering to happen on response. - The order of MIDDLEWARE_CLASSES is important: the Debug Toolbar middleware - must come after any other middleware that encodes the response's content + The order of MIDDLEWARE_CLASSES is important: the Debug Toolbar middleware + must come after any other middleware that encodes the response's content (such as GZipMiddleware). Note: The debug toolbar will only display itself if the mimetype of the @@ -60,9 +60,9 @@ Configuration The debug toolbar has two settings that can be set in `settings.py`: -#. Optional: Add a tuple called `DEBUG_TOOLBAR_PANELS` to your ``settings.py`` - file that specifies the full Python path to the panel that you want included - in the Toolbar. This setting looks very much like the `MIDDLEWARE_CLASSES` +#. Optional: Add a tuple called `DEBUG_TOOLBAR_PANELS` to your ``settings.py`` + file that specifies the full Python path to the panel that you want included + in the Toolbar. This setting looks very much like the `MIDDLEWARE_CLASSES` setting. For example:: DEBUG_TOOLBAR_PANELS = ( @@ -101,15 +101,24 @@ The debug toolbar has two settings that can be set in `settings.py`: * `EXTRA_SIGNALS`: An array of custom signals that might be in your project, defined as the python path to the signal. + * `HIDE_DJANGO_SQL`: If set to True (the default) then code in Django itself + won't be shown in SQL stacktraces. + + * `SHOW_TEMPLATE_CONTEXT`: If set to True (the default) then a template's + context will be included with it in the Template debug panel. Turning this + off is useful when you have large template contexts, or you have template + contexts with lazy datastructures that you don't want to be evaluated. + Example configuration:: def custom_show_toolbar(request): return True # Always show toolbar, for example purposes only. - + DEBUG_TOOLBAR_CONFIG = { 'INTERCEPT_REDIRECTS': False, 'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar, 'EXTRA_SIGNALS': ['myproject.signals.MySignal'], + 'HIDE_DJANGO_SQL': False, } TODOs and BUGS diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py index 17130cadb..0c9bc617e 100644 --- a/debug_toolbar/panels/sql.py +++ b/debug_toolbar/panels/sql.py @@ -1,7 +1,8 @@ +from datetime import datetime import os import SocketServer -from datetime import datetime import traceback + import django from django.conf import settings from django.db import connection @@ -10,6 +11,7 @@ from django.utils import simplejson from django.utils.encoding import force_unicode from django.utils.hashcompat import sha_constructor + from debug_toolbar.panels import DebugPanel # Figure out some paths @@ -71,7 +73,8 @@ def tidy_stacktrace(strace): trace = [] for s in strace[:-1]: s_path = os.path.realpath(s[0]) - if django_path in s_path and not 'django/contrib' in s_path: + if getattr(settings, 'DEBUG_TOOLBAR_CONFIG', {}).get('HIDE_DJANGO_SQL', True) \ + and django_path in s_path and not 'django/contrib' in s_path: continue if socketserver_path in s_path: continue diff --git a/debug_toolbar/panels/template.py b/debug_toolbar/panels/template.py index 391902f4d..f090c78fe 100644 --- a/debug_toolbar/panels/template.py +++ b/debug_toolbar/panels/template.py @@ -37,16 +37,18 @@ class TemplateDebugPanel(DebugPanel): def __init__(self): self.templates = [] - template_rendered.connect(self._storeTemplateInfo) + template_rendered.connect(self._store_template_info) - def _storeTemplateInfo(self, sender, **kwargs): + def _store_template_info(self, sender, **kwargs): self.templates.append(kwargs) def nav_title(self): return _('Templates') def title(self): - return 'Templates' + num_templates = len([t for t in self.templates + if not t['template'].name.startswith('debug_toolbar/')]) + return 'Templates (%s rendered)' % num_templates def url(self): return '' @@ -75,15 +77,16 @@ def content(self): t.origin_name = 'No origin' info['template'] = t # Clean up context for better readability - c = d.get('context', None) - - d_list = [] - for _d in c.dicts: - try: - d_list.append(pformat(d)) - except UnicodeEncodeError: - pass - info['context'] = '\n'.join(d_list) + if getattr(settings, 'DEBUG_TOOLBAR_CONFIG', {}).get('SHOW_TEMPLATE_CONTEXT', True): + c = d.get('context', None) + + d_list = [] + for _d in c.dicts: + try: + d_list.append(pformat(d)) + except UnicodeEncodeError: + pass + info['context'] = '\n'.join(d_list) template_context.append(info) context = { 'templates': template_context, diff --git a/debug_toolbar/templates/debug_toolbar/panels/templates.html b/debug_toolbar/templates/debug_toolbar/panels/templates.html index 1158abe14..610787606 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/templates.html +++ b/debug_toolbar/templates/debug_toolbar/panels/templates.html @@ -16,10 +16,12 @@

{% trans "Template" %}{{ templates|length|pluralize }}

{% for template in templates %}
{{ template.template.name|addslashes }}
{{ template.template.origin_name|addslashes }}
+ {% if template.context %}
Toggle Context
+ {% endif %} {% endfor %} {% else %}