Skip to content

Commit be03d58

Browse files
authored
Merge pull request #5 from OndrejIT/master
Fix working with jinja2
2 parents bc97388 + af4bdda commit be03d58

File tree

1 file changed

+37
-17
lines changed

1 file changed

+37
-17
lines changed

template_profiler_panel/panels/template.py

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,18 @@
33
from inspect import stack
44

55
from django.dispatch import Signal
6-
from django.template import Template
76
from django.utils.translation import ugettext_lazy as _
87

98
from debug_toolbar.panels import Panel
109

10+
from django.template import Template as DjangoTemplate
11+
12+
try:
13+
jinja_import = True
14+
from jinja2 import Template as JinjaTemplate
15+
except ImportError:
16+
jinja_import = False
17+
1118

1219
def dummy_color_generator():
1320
while True:
@@ -24,25 +31,38 @@ def dummy_color_generator():
2431
providing_args=['instance', 'start', 'end', 'level'])
2532

2633

27-
def template_render_wrapper(self, context):
28-
result = None
29-
if hasattr(Template, 'tp_saved_render'):
30-
t_start = time()
31-
try:
32-
result = Template.tp_saved_render(self, context)
33-
finally:
34-
t_end = time()
34+
def template_render_wrapper_django(self, context):
35+
t_start = time()
36+
result = DjangoTemplate.tp_saved_render(self, context)
37+
t_end = time()
3538

36-
template_rendered.send(
37-
sender=Template, instance=self, start=t_start, end=t_end,
38-
level=len(stack()))
39+
template_rendered.send(
40+
sender=DjangoTemplate, instance=self, start=t_start, end=t_end,
41+
level=len(stack()))
3942

4043
return result
4144

42-
# Wrap the original Template.render
43-
if not hasattr(Template, 'tp_saved_render'):
44-
Template.tp_saved_render = Template.render
45-
Template.render = template_render_wrapper
45+
46+
def template_render_wrapper_jinja(self, context):
47+
t_start = time()
48+
result = JinjaTemplate.tp_saved_render(self, context)
49+
t_end = time()
50+
51+
template_rendered.send(
52+
sender=JinjaTemplate, instance=self, start=t_start, end=t_end,
53+
level=len(stack()))
54+
55+
return result
56+
57+
58+
DjangoTemplate.engine = DjangoTemplate
59+
DjangoTemplate.tp_saved_render = DjangoTemplate.render
60+
DjangoTemplate.render = template_render_wrapper_django
61+
62+
if jinja_import:
63+
JinjaTemplate.engine = JinjaTemplate
64+
JinjaTemplate.tp_saved_render = JinjaTemplate.render
65+
JinjaTemplate.render = template_render_wrapper_jinja
4666

4767

4868
class TemplateProfilerPanel(Panel):
@@ -62,7 +82,7 @@ def __init__(self, *args, **kwargs):
6282
self.colors = {}
6383
self.templates = []
6484
self.color_generator = contrasting_color_generator()
65-
return super(TemplateProfilerPanel, self).__init__(*args, **kwargs)
85+
super(TemplateProfilerPanel, self).__init__(*args, **kwargs)
6686

6787
@property
6888
def nav_title(self):

0 commit comments

Comments
 (0)