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):
         """