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 | |
| 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')
| -rw-r--r-- | debug_toolbar/panels/template.py | 56 | ||||
| -rw-r--r-- | debug_toolbar/templates/debug_toolbar/panels/templates.html | 21 | 
2 files changed, 77 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) 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 @@ +<h3>Template path(s):</h3> +{% if template_dirs %} +	<ol> +	{% for template in template_dirs %} +		<li>{{ template }}</li> +	{% endfor %} +	</ol> +{% else %} +	None +{% endif %} +<h3>Templates Used</h3> +{% if templates %} +<dl> +{% for template in templates %} +	<dt><strong>{{ template.0 }}</strong></dt> +	<dd><samp>{{ template.1 }}</samp></dd> +{% endfor %} +</dl> +{% else %} +	None +{% endif %}
\ No newline at end of file  | 
