mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Fixed #35789 -- Improved the error message raised when the tag must be first in the template.
This commit is contained in:
parent
e970bb7ca7
commit
68cee15a8f
@ -533,9 +533,13 @@ class Parser:
|
|||||||
def extend_nodelist(self, nodelist, node, token):
|
def extend_nodelist(self, nodelist, node, token):
|
||||||
# Check that non-text nodes don't appear before an extends tag.
|
# Check that non-text nodes don't appear before an extends tag.
|
||||||
if node.must_be_first and nodelist.contains_nontext:
|
if node.must_be_first and nodelist.contains_nontext:
|
||||||
|
if self.origin.template_name:
|
||||||
|
origin = repr(self.origin.template_name)
|
||||||
|
else:
|
||||||
|
origin = "the template"
|
||||||
raise self.error(
|
raise self.error(
|
||||||
token,
|
token,
|
||||||
"%r must be the first tag in the template." % node,
|
"{%% %s %%} must be the first tag in %s." % (token.contents, origin),
|
||||||
)
|
)
|
||||||
if not isinstance(node, TextNode):
|
if not isinstance(node, TextNode):
|
||||||
nodelist.contains_nontext = True
|
nodelist.contains_nontext = True
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from django.template import Context, Engine, TemplateDoesNotExist
|
from django.template import Context, Engine, TemplateDoesNotExist, TemplateSyntaxError
|
||||||
from django.test import SimpleTestCase
|
from django.test import SimpleTestCase
|
||||||
|
|
||||||
from .utils import ROOT
|
from .utils import ROOT, setup
|
||||||
|
|
||||||
RECURSIVE = os.path.join(ROOT, "recursive_templates")
|
RECURSIVE = os.path.join(ROOT, "recursive_templates")
|
||||||
|
|
||||||
@ -181,3 +181,17 @@ class ExtendsBehaviorTests(SimpleTestCase):
|
|||||||
)
|
)
|
||||||
template = engine.get_template("base.html")
|
template = engine.get_template("base.html")
|
||||||
self.assertEqual(template.render(Context({})), "12AB")
|
self.assertEqual(template.render(Context({})), "12AB")
|
||||||
|
|
||||||
|
@setup(
|
||||||
|
{"index.html": "{% block content %}B{% endblock %}{% extends 'base.html' %}"}
|
||||||
|
)
|
||||||
|
def test_extends_not_first_tag_in_extended_template(self):
|
||||||
|
msg = "{% extends 'base.html' %} must be the first tag in 'index.html'."
|
||||||
|
with self.assertRaisesMessage(TemplateSyntaxError, msg):
|
||||||
|
self.engine.get_template("index.html")
|
||||||
|
|
||||||
|
def test_extends_not_first_tag_in_extended_template_from_string(self):
|
||||||
|
template_string = "{% block content %}B{% endblock %}{% extends 'base.html' %}"
|
||||||
|
msg = "{% extends 'base.html' %} must be the first tag in the template."
|
||||||
|
with self.assertRaisesMessage(TemplateSyntaxError, msg):
|
||||||
|
Engine().from_string(template_string)
|
||||||
|
Loading…
Reference in New Issue
Block a user