From aff9e3e323c620b2f9f16625fde60d831b47b596 Mon Sep 17 00:00:00 2001
From: ryneeverett
Date: Sun, 2 Oct 2016 15:58:46 -0400
Subject: [PATCH] Support recursive template extension.
From the [django 1.9 release
notes](https://docs.djangoproject.com/en/1.10/releases/1.9/):
> - Django template loaders can now extend templates recursively.
...
> Django template loaders have been updated to allow recursive template
> extending. This change necessitated a new template loader API. The old
> load_template() and load_template_sources() methods are now
> deprecated.
Prior to this patch, when a template is recursively extended the latest
template in the template loaders is displayed regardless of the template
origin since the proper template can no longer be disambiguated by
template_name.
---
debug_toolbar/panels/templates/views.py | 32 ++++++++++++++-----
.../debug_toolbar/panels/templates.html | 2 +-
2 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/debug_toolbar/panels/templates/views.py b/debug_toolbar/panels/templates/views.py
index db505d843..fbae00243 100644
--- a/debug_toolbar/panels/templates/views.py
+++ b/debug_toolbar/panels/templates/views.py
@@ -6,15 +6,21 @@
from django.template.engine import Engine
from django.utils.safestring import mark_safe
+try:
+ from django.template import Origin
+except ImportError:
+ Origin = None
+
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')
+ template_origin_name = request.GET.get('template_origin', None)
+ if template_origin_name is None:
+ return HttpResponseBadRequest('"template_origin" key is required')
+ template_name = request.GET.get('template', template_origin_name)
final_loaders = []
loaders = Engine.get_default().template_loaders
@@ -30,11 +36,21 @@ def template_source(request):
final_loaders.append(loader)
for loader in final_loaders:
- try:
- source, display_name = loader.load_template_source(template_name)
- break
- except TemplateDoesNotExist:
- source = "Template Does Not Exist: %s" % (template_name,)
+ if Origin: # django>=1.9
+ origin = Origin(template_origin_name)
+ try:
+ source = loader.get_contents(origin)
+ break
+ except TemplateDoesNotExist:
+ pass
+ else: # django<1.9
+ try:
+ source, _ = loader.load_template_source(template_name)
+ break
+ except TemplateDoesNotExist:
+ pass
+ else:
+ source = "Template Does Not Exist: %s" % (template_origin_name,)
try:
from pygments import highlight
diff --git a/debug_toolbar/templates/debug_toolbar/panels/templates.html b/debug_toolbar/templates/debug_toolbar/panels/templates.html
index 435828837..c657f0beb 100644
--- a/debug_toolbar/templates/debug_toolbar/panels/templates.html
+++ b/debug_toolbar/templates/debug_toolbar/panels/templates.html
@@ -14,7 +14,7 @@ {% blocktrans count templates|length as template_count %}Template{% plural %
{% if templates %}
{% for template in templates %}
- - {{ template.template.name|addslashes }}
+- {{ template.template.name|addslashes }}
- {{ template.template.origin_name|addslashes }}
{% if template.context %}
-