From 6e41146140e85ca74a13fa0f7f9ae868a83ea31e Mon Sep 17 00:00:00 2001 From: Rob Hudson Date: Tue, 9 Sep 2008 23:27:48 -0700 Subject: Adding a templates panel that shows the templates used during a request/response cycle. Also lists settings.TEMPLATE_DIRS. --- debug_toolbar/panels/template.py | 56 ++++++++++++++++++++++ .../templates/debug_toolbar/panels/templates.html | 21 ++++++++ 2 files changed, 77 insertions(+) create mode 100644 debug_toolbar/panels/template.py create mode 100644 debug_toolbar/templates/debug_toolbar/panels/templates.html (limited to 'debug_toolbar') diff --git a/debug_toolbar/panels/template.py b/debug_toolbar/panels/template.py new file mode 100644 index 0000000..f1cf65b --- /dev/null +++ b/debug_toolbar/panels/template.py @@ -0,0 +1,56 @@ +from django.conf import settings +from django.core.signals import request_started +from django.dispatch import Signal +from django.template.loader import render_to_string +from django.test.signals import template_rendered +from debug_toolbar.panels import DebugPanel + +# Code taken and adapted from Simon Willison and Django Snippets: +# http://www.djangosnippets.org/snippets/766/ + +# Monkeypatch instrumented test renderer from django.test.utils - we could use +# django.test.utils.setup_test_environment for this but that would also set up +# e-mail interception, which we don't want +from django.test.utils import instrumented_test_render +from django.template import Template +if Template.render != instrumented_test_render: + Template.original_render = Template.render + Template.render = instrumented_test_render +# MONSTER monkey-patch +old_template_init = Template.__init__ +def new_template_init(self, template_string, origin=None, name=''): + old_template_init(self, template_string, origin, name) + self.origin = origin +Template.__init__ = new_template_init + +class TemplateDebugPanel(DebugPanel): + """ + A panel that lists all templates used during processing of a response. + """ + name = 'Template' + has_content = True + + def __init__(self, request): + super(TemplateDebugPanel, self).__init__(request) + self.templates_used = [] + template_rendered.connect(self._storeRenderedTemplates) + + def _storeRenderedTemplates(self, sender, **kwargs): + self.templates_used.append(kwargs['template']) + + def title(self): + return 'Templates' + + def url(self): + return '' + + def content(self): + templates = [ + (t.name, t.origin and t.origin.name or 'No origin') + for t in self.templates_used + ] + context = { + 'templates': templates, + 'template_dirs': settings.TEMPLATE_DIRS, + } + return render_to_string('debug_toolbar/panels/templates.html', context) diff --git a/debug_toolbar/templates/debug_toolbar/panels/templates.html b/debug_toolbar/templates/debug_toolbar/panels/templates.html new file mode 100644 index 0000000..58904be --- /dev/null +++ b/debug_toolbar/templates/debug_toolbar/panels/templates.html @@ -0,0 +1,21 @@ +

Template path(s):

+{% if template_dirs %} +
    + {% for template in template_dirs %} +
  1. {{ template }}
  2. + {% endfor %} +
+{% else %} + None +{% endif %} +

Templates Used

+{% if templates %} +
+{% for template in templates %} +
{{ template.0 }}
+
{{ template.1 }}
+{% endfor %} +
+{% else %} + None +{% endif %} \ No newline at end of file -- cgit v1.2.3