aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/panels/templates/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'debug_toolbar/panels/templates/views.py')
-rw-r--r--debug_toolbar/panels/templates/views.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/debug_toolbar/panels/templates/views.py b/debug_toolbar/panels/templates/views.py
new file mode 100644
index 0000000..79479d9
--- /dev/null
+++ b/debug_toolbar/panels/templates/views.py
@@ -0,0 +1,46 @@
+from __future__ import absolute_import, unicode_literals
+
+from django.http import HttpResponseBadRequest
+from django.conf import settings
+from django.shortcuts import render
+from django.template import TemplateDoesNotExist
+from django.template.loader import find_template_loader
+from django.utils.safestring import mark_safe
+
+
+def template_source(request):
+ """
+ Return the source of a template, syntax-highlighted by Pygments if
+ it's available.
+ """
+ template_name = request.GET.get('template', None)
+ if template_name is None:
+ return HttpResponseBadRequest('"template" key is required')
+
+ loaders = []
+ for loader_name in settings.TEMPLATE_LOADERS:
+ loader = find_template_loader(loader_name)
+ if loader is not None:
+ loaders.append(loader)
+ for loader in loaders:
+ try:
+ source, display_name = loader.load_template_source(template_name)
+ break
+ except TemplateDoesNotExist:
+ source = "Template Does Not Exist: %s" % (template_name,)
+
+ try:
+ from pygments import highlight
+ from pygments.lexers import HtmlDjangoLexer
+ from pygments.formatters import HtmlFormatter
+
+ source = highlight(source, HtmlDjangoLexer(), HtmlFormatter())
+ source = mark_safe(source)
+ source.pygmentized = True
+ except ImportError:
+ pass
+
+ return render(request, 'debug_toolbar/panels/template_source.html', {
+ 'source': source,
+ 'template_name': template_name
+ })