From b1abfb3c59467d0bb088e19be76fc42fcb570835 Mon Sep 17 00:00:00 2001 From: Anubhav Joshi Date: Sun, 13 Jul 2014 14:28:36 +0530 Subject: [PATCH] Fixed #21707 -- Added helpful error message when using {{ block.super }} in base template. Thanks mitar for the suggestion. --- django/template/loader_tags.py | 5 +++++ tests/template_tests/tests.py | 3 +++ 2 files changed, 8 insertions(+) diff --git a/django/template/loader_tags.py b/django/template/loader_tags.py index 77508a76637..1480e5e1932 100644 --- a/django/template/loader_tags.py +++ b/django/template/loader_tags.py @@ -68,6 +68,11 @@ class BlockNode(Node): return result def super(self): + if not hasattr(self, 'context'): + raise TemplateSyntaxError( + "'%s' object has no attribute 'context'. Did you use " + "{{ block.super }} in a base template?" % self.__class__.__name__ + ) render_context = self.context.render_context if (BLOCK_CONTEXT_KEY in render_context and render_context[BLOCK_CONTEXT_KEY].get_block(self.name) is not None): diff --git a/tests/template_tests/tests.py b/tests/template_tests/tests.py index e785962c211..84b6592f577 100644 --- a/tests/template_tests/tests.py +++ b/tests/template_tests/tests.py @@ -881,6 +881,9 @@ class TemplateTests(TestCase): # Raise exception for custom tags used in child with {% load %} tag in parent, not in child 'exception04': ("{% extends 'inheritance17' %}{% block first %}{% echo 400 %}5678{% endblock %}", {}, template.TemplateSyntaxError), + # Raise exception for block.super used in base template + 'exception05': ("{% block first %}{{ block.super }}{% endblock %}", {}, template.TemplateSyntaxError), + ### FILTER TAG ############################################################ 'filter01': ('{% filter upper %}{% endfilter %}', {}, ''), 'filter02': ('{% filter upper %}django{% endfilter %}', {}, 'DJANGO'),