Skip to content

Commit 8db3450

Browse files
committed
WIP: instrument the jinja render function (more)
It instruments the single template render, but not the inherited templates and I'm guessing not the included templates either. I suspect we're going to have to patch jinja templates more robustly than relying on the django jinja backend template class.
1 parent 39e2e77 commit 8db3450

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed
+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import functools
2+
3+
from django.template.backends.jinja2 import Template as JinjaTemplate
4+
from django.template.context import make_context
5+
from django.test.signals import template_rendered
6+
7+
8+
def patch_jinja_render():
9+
orig_render = JinjaTemplate.render
10+
11+
@functools.wraps(orig_render)
12+
def wrapped_render(self, context=None, request=None):
13+
print(self.template.name)
14+
self.name = self.template.name
15+
template_rendered.send(
16+
sender=self, template=self, context=make_context(context, request)
17+
)
18+
return orig_render(self, context, request)
19+
20+
if JinjaTemplate.render != wrapped_render:
21+
JinjaTemplate.original_render = JinjaTemplate.render
22+
JinjaTemplate.render = wrapped_render

debug_toolbar/panels/templates/panel.py

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from debug_toolbar.panels import Panel
1515
from debug_toolbar.panels.sql.tracking import SQLQueryTriggered, allow_sql
1616
from debug_toolbar.panels.templates import views
17+
from debug_toolbar.panels.templates.jinja2 import patch_jinja_render
1718

1819
# Monkey-patch to enable the template_rendered signal. The receiver returns
1920
# immediately when the panel is disabled to keep the overhead small.
@@ -25,6 +26,7 @@
2526
Template.original_render = Template._render
2627
Template._render = instrumented_test_render
2728

29+
patch_jinja_render()
2830

2931
# Monkey-patch to store items added by template context processors. The
3032
# overhead is sufficiently small to justify enabling it unconditionally.

0 commit comments

Comments
 (0)