summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAymeric Augustin <aymeric.augustin@m4x.org>2012-11-24 22:04:17 +0100
committerAymeric Augustin <aymeric.augustin@m4x.org>2012-11-24 22:10:51 +0100
commitd26691958443a4b968fecba5510c37768153fafa (patch)
tree6dfa97148d1beaff8c835c1063c5f777e52e38b1
parent690cac3a34321208c4601e37bd5166ee7133e5ef (diff)
Fixed #19280 -- Raised an explicit exception for the old {% url %} syntax.
-rw-r--r--django/template/defaulttags.py4
-rw-r--r--docs/ref/templates/builtins.txt10
-rw-r--r--tests/regressiontests/templates/tests.py11
3 files changed, 24 insertions, 1 deletions
diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py
index 380db41d43..1f4627e32a 100644
--- a/django/template/defaulttags.py
+++ b/django/template/defaulttags.py
@@ -398,6 +398,10 @@ class URLNode(Node):
view_name = self.view_name.resolve(context)
+ if not view_name:
+ raise TemplateSyntaxError("'url' takes requires a non-empty first"
+ " argument. The syntax changed in Django 1.5, see the docs.")
+
# Try to look up the URL twice: once given the view name, and again
# relative to what we guess is the "main" app. If they both fail,
# re-raise the NoReverseMatch unless we're using the
diff --git a/docs/ref/templates/builtins.txt b/docs/ref/templates/builtins.txt
index ba43e2eb15..c525162862 100644
--- a/docs/ref/templates/builtins.txt
+++ b/docs/ref/templates/builtins.txt
@@ -1035,6 +1035,16 @@ This will follow the normal :ref:`namespaced URL resolution strategy
<topics-http-reversing-url-namespaces>`, including using any hints provided
by the context as to the current application.
+.. warning::
+
+ Don't forget to put quotes around the function path or pattern name!
+
+ .. versionchanged:: 1.5
+ The first paramater used not to be quoted, which was inconsistent with
+ other template tags. Since Django 1.5, it is evaluated according to
+ the usual rules: it can be a quoted string or a variable that will be
+ looked up in the context.
+
.. templatetag:: verbatim
verbatim
diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py
index 875035bc2e..6d55ebbc17 100644
--- a/tests/regressiontests/templates/tests.py
+++ b/tests/regressiontests/templates/tests.py
@@ -19,7 +19,8 @@ except ImportError: # Python 2
from urlparse import urljoin
from django import template
-from django.template import base as template_base, RequestContext, Template, Context
+from django.template import (base as template_base, Context, RequestContext,
+ Template, TemplateSyntaxError)
from django.core import urlresolvers
from django.template import loader
from django.template.loaders import app_directories, filesystem, cached
@@ -364,6 +365,14 @@ class Templates(TestCase):
with self.assertRaises(urlresolvers.NoReverseMatch):
t.render(c)
+ def test_url_explicit_exception_for_old_syntax(self):
+ # Regression test for #19280
+ t = Template('{% url path.to.view %}') # not quoted = old syntax
+ c = Context()
+ with self.assertRaisesRegexp(TemplateSyntaxError,
+ "The syntax changed in Django 1.5, see the docs."):
+ t.render(c)
+
@override_settings(DEBUG=True, TEMPLATE_DEBUG=True)
def test_no_wrapped_exception(self):
"""