diff --git a/debug_toolbar/panels/history/panel.py b/debug_toolbar/panels/history/panel.py index 4494bbfcd..0382cad62 100644 --- a/debug_toolbar/panels/history/panel.py +++ b/debug_toolbar/panels/history/panel.py @@ -15,7 +15,7 @@ class HistoryPanel(Panel): - """ A panel to display History """ + """A panel to display History""" title = _("History") nav_title = _("History") diff --git a/debug_toolbar/utils.py b/debug_toolbar/utils.py index 41889872a..f8fb68538 100644 --- a/debug_toolbar/utils.py +++ b/debug_toolbar/utils.py @@ -135,7 +135,14 @@ def get_template_context(node, context, context_lines=3): def get_template_source_from_exception_info(node, context): - exception_info = context.template.get_exception_info(Exception("DDT"), node.token) + if context.template.origin == node.origin: + exception_info = context.template.get_exception_info( + Exception("DDT"), node.token + ) + else: + exception_info = context.render_context.template.get_exception_info( + Exception("DDT"), node.token + ) line = exception_info["line"] source_lines = exception_info["source_lines"] name = exception_info["name"] diff --git a/tests/panels/test_sql.py b/tests/panels/test_sql.py index 9ed2b1a6e..84b789868 100644 --- a/tests/panels/test_sql.py +++ b/tests/panels/test_sql.py @@ -1,4 +1,5 @@ import datetime +import os import unittest import django @@ -396,3 +397,47 @@ def test_prettify_sql(self): self.panel.generate_stats(self.request, response) self.assertEqual(len(self.panel._queries), 1) self.assertEqual(pretty_sql, self.panel._queries[-1][1]["sql"]) + + @override_settings( + DEBUG=True, + ) + def test_flat_template_information(self): + """ + Test case for when the query is used in a flat template hierarchy + (without included templates). + """ + self.assertEqual(len(self.panel._queries), 0) + + users = User.objects.all() + render(self.request, "sql/flat.html", {"users": users}) + + self.assertEqual(len(self.panel._queries), 1) + + query = self.panel._queries[0] + template_info = query[1]["template_info"] + template_name = os.path.basename(template_info["name"]) + self.assertEqual(template_name, "flat.html") + self.assertEqual(template_info["context"][2]["content"].strip(), "{{ users }}") + self.assertEqual(template_info["context"][2]["highlight"], True) + + @override_settings( + DEBUG=True, + ) + def test_nested_template_information(self): + """ + Test case for when the query is used in a nested template + hierarchy (with included templates). + """ + self.assertEqual(len(self.panel._queries), 0) + + users = User.objects.all() + render(self.request, "sql/nested.html", {"users": users}) + + self.assertEqual(len(self.panel._queries), 1) + + query = self.panel._queries[0] + template_info = query[1]["template_info"] + template_name = os.path.basename(template_info["name"]) + self.assertEqual(template_name, "included.html") + self.assertEqual(template_info["context"][0]["content"].strip(), "{{ users }}") + self.assertEqual(template_info["context"][0]["highlight"], True) diff --git a/tests/templates/sql/flat.html b/tests/templates/sql/flat.html new file mode 100644 index 000000000..058dbe043 --- /dev/null +++ b/tests/templates/sql/flat.html @@ -0,0 +1,4 @@ +{% extends "base.html" %} +{% block content %} + {{ users }} +{% endblock %} diff --git a/tests/templates/sql/included.html b/tests/templates/sql/included.html new file mode 100644 index 000000000..87d2e1f70 --- /dev/null +++ b/tests/templates/sql/included.html @@ -0,0 +1 @@ +{{ users }} diff --git a/tests/templates/sql/nested.html b/tests/templates/sql/nested.html new file mode 100644 index 000000000..8558e2d45 --- /dev/null +++ b/tests/templates/sql/nested.html @@ -0,0 +1,4 @@ +{% extends "base.html" %} +{% block content %} + {% include "sql/included.html" %} +{% endblock %}