diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 45f4c1dbb1..aca2f41f2d 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -1262,7 +1262,12 @@ def url(parser, token): if len(bits) < 2: raise TemplateSyntaxError("'%s' takes at least one argument" " (path to a view)" % bits[0]) - viewname = parser.compile_filter(bits[1]) + try: + viewname = parser.compile_filter(bits[1]) + except TemplateSyntaxError as exc: + exc.args = (exc.args[0] + ". " + "The syntax of 'url' changed in Django 1.5, see the docs."), + raise args = [] kwargs = {} asvar = None diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index 9ec487d06c..d21434a12e 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -366,7 +366,7 @@ class Templates(TestCase): with self.assertRaises(urlresolvers.NoReverseMatch): t.render(c) - def test_url_explicit_exception_for_old_syntax(self): + def test_url_explicit_exception_for_old_syntax_at_run_time(self): # Regression test for #19280 t = Template('{% url path.to.view %}') # not quoted = old syntax c = Context() @@ -374,6 +374,12 @@ class Templates(TestCase): "The syntax changed in Django 1.5, see the docs."): t.render(c) + def test_url_explicit_exception_for_old_syntax_at_compile_time(self): + # Regression test for #19392 + with self.assertRaisesRegexp(template.TemplateSyntaxError, + "The syntax of 'url' changed in Django 1.5, see the docs."): + t = Template('{% url my-view %}') # not a variable = old syntax + @override_settings(DEBUG=True, TEMPLATE_DEBUG=True) def test_no_wrapped_exception(self): """