diff options
| author | Aymeric Augustin <aymeric.augustin@m4x.org> | 2012-11-24 22:04:17 +0100 |
|---|---|---|
| committer | Aymeric Augustin <aymeric.augustin@m4x.org> | 2012-11-24 22:10:51 +0100 |
| commit | d26691958443a4b968fecba5510c37768153fafa (patch) | |
| tree | 6dfa97148d1beaff8c835c1063c5f777e52e38b1 | |
| parent | 690cac3a34321208c4601e37bd5166ee7133e5ef (diff) | |
Fixed #19280 -- Raised an explicit exception for the old {% url %} syntax.
| -rw-r--r-- | django/template/defaulttags.py | 4 | ||||
| -rw-r--r-- | docs/ref/templates/builtins.txt | 10 | ||||
| -rw-r--r-- | tests/regressiontests/templates/tests.py | 11 |
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): """ |
