diff options
Diffstat (limited to 'debug_toolbar/panels/templates/views.py')
| -rw-r--r-- | debug_toolbar/panels/templates/views.py | 46 |
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 + }) |
