diff --git a/debug_toolbar/panels/templates/panel.py b/debug_toolbar/panels/templates/panel.py index 87c5262bf..8d55823e7 100644 --- a/debug_toolbar/panels/templates/panel.py +++ b/debug_toolbar/panels/templates/panel.py @@ -13,7 +13,6 @@ from django.conf.urls import url from django.db.models.query import QuerySet, RawQuerySet from django.template import Context, RequestContext, Template -from django.template.context import get_standard_processors from django.test.signals import template_rendered from django.test.utils import instrumented_test_render from django.utils.encoding import force_text @@ -24,6 +23,11 @@ from debug_toolbar.panels.sql.tracking import recording, SQLQueryTriggered from debug_toolbar.panels.templates import views +try: + from django.template.engine import Engine +except ImportError: + Engine = None + from django.template.context import get_standard_processors # Monkey-patch to enable the template_rendered signal. The receiver returns # immediately when the panel is disabled to keep the overhead small. @@ -51,7 +55,11 @@ def _request_context__init__( processors = tuple(processors) self.context_processors = OrderedDict() updates = dict() - for processor in get_standard_processors() + processors: + if Engine: + std_processors = Engine.get_default().template_context_processors + else: + std_processors = get_standard_processors() + for processor in std_processors + processors: name = '%s.%s' % (processor.__module__, processor.__name__) context = processor(request) self.context_processors[name] = context @@ -191,8 +199,13 @@ def process_response(self, request, response): else: context_processors = None + if Engine: + template_dirs = Engine.get_default().dirs + else: + template_dirs = settings.TEMPLATE_DIRS + self.record_stats({ 'templates': template_context, - 'template_dirs': [normpath(x) for x in settings.TEMPLATE_DIRS], + 'template_dirs': [normpath(x) for x in template_dirs], 'context_processors': context_processors, }) diff --git a/debug_toolbar/panels/templates/views.py b/debug_toolbar/panels/templates/views.py index 91895e80f..15f1fc5ee 100644 --- a/debug_toolbar/panels/templates/views.py +++ b/debug_toolbar/panels/templates/views.py @@ -4,12 +4,13 @@ from django.conf import settings from django.shortcuts import render_to_response from django.template import TemplateDoesNotExist -try: - from django.template.loaders.utils import find_template_loader -except ImportError: # django < 1.8 - from django.template.loader import find_template_loader from django.utils.safestring import mark_safe +try: + from django.template.engine import Engine +except ImportError: + Engine = None + from django.template.loader import find_template_loader def template_source(request): """ @@ -20,18 +21,23 @@ def template_source(request): 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) + final_loaders = [] + if Engine: + loaders = Engine.get_default().template_loaders + else: + loaders = [find_template_loader(loader_name) for loader_name in settings.TEMPLATE_LOADERS] + + for loader in loaders: if loader is not None: # When the loader has loaders associated with it, # append those loaders to the list. This occurs with # django.template.loaders.cached.Loader if hasattr(loader, 'loaders'): - loaders += loader.loaders + final_loaders += loader.loaders else: - loaders.append(loader) - for loader in loaders: + final_loaders.append(loader) + + for loader in final_loaders: try: source, display_name = loader.load_template_source(template_name) break