diff options
| author | Rob Hudson | 2008-09-09 23:27:48 -0700 |
|---|---|---|
| committer | Rob Hudson | 2008-09-09 23:27:48 -0700 |
| commit | 6e41146140e85ca74a13fa0f7f9ae868a83ea31e (patch) | |
| tree | 72f46e0c4fc038498a1dcc2021388d71a9cd3fe1 /debug_toolbar/panels/template.py | |
| parent | 338c7a0a38996d2ffb3e192b63646a6c23dc5bba (diff) | |
| download | django-debug-toolbar-6e41146140e85ca74a13fa0f7f9ae868a83ea31e.tar.bz2 | |
Adding a templates panel that shows the templates used during a
request/response cycle. Also lists settings.TEMPLATE_DIRS.
Diffstat (limited to 'debug_toolbar/panels/template.py')
| -rw-r--r-- | debug_toolbar/panels/template.py | 56 |
1 files changed, 56 insertions, 0 deletions
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='<Unknown Template>'): + 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) |
