Further error message improvement, this time for #341.
authorArmin Ronacher <armin.ronacher@active-4.com>
Sun, 7 Feb 2010 00:27:47 +0000 (01:27 +0100)
committerArmin Ronacher <armin.ronacher@active-4.com>
Sun, 7 Feb 2010 00:27:47 +0000 (01:27 +0100)
--HG--
branch : trunk

jinja2/parser.py
tests/test_parser.py

index bc4925e4d445bbf2370310c122850f3aea3eae04..96980d1c9af66c71b0cc6c9c7e889bf08cc23af2 100644 (file)
@@ -212,6 +212,15 @@ class Parser(object):
         node = nodes.Block(lineno=next(self.stream).lineno)
         node.name = self.stream.expect('name').value
         node.scoped = self.stream.skip_if('name:scoped')
+
+        # common problem people encounter when switching from django
+        # to jinja.  we do not support hyphens in block names, so let's
+        # raise a nicer error message in that case.
+        if self.stream.current.type == 'sub':
+            self.fail('Block names in Jinja have to be valid Python '
+                      'identifiers and may not contain hypens, use an '
+                      'underscore instead.')
+
         node.body = self.parse_statements(('name:endblock',), drop_needle=True)
         self.stream.skip_if('name:' + node.name)
         return node
index cb75ca6df1013f9ef6eddcf4b40841132de24976..9e546c4869a1a509113a9f4984006f6b1647a272 100644 (file)
@@ -141,3 +141,6 @@ def test_error_messages():
                  "Unexpected end of template. Jinja was looking for the "
                  "following tags: 'endfor' or 'else'. The innermost block "
                  "that needs to be closed is 'for'.")
+    assert_error('{% block foo-bar-baz %}',
+                 "Block names in Jinja have to be valid Python identifiers "
+                 "and may not contain hypens, use an underscore instead.")