summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Johnson <danj.py@gmail.com>2013-09-06 13:43:58 -0500
committerTim Graham <timograham@gmail.com>2013-09-06 15:46:43 -0400
commitdf462cf7604578c2afd43b988b7ea1fe5e727896 (patch)
tree5e16f7aadf00e6c0a557d424255bd97ba775bcb5
parentc7c19ac4080a533ef881b57e88e1efbc2882f7d2 (diff)
Fixed #21043 -- Made resolve() handle reverse_lazy objects.
Thanks Keryn Knight for the report.
-rw-r--r--django/core/urlresolvers.py1
-rw-r--r--tests/urlpatterns_reverse/tests.py15
2 files changed, 15 insertions, 1 deletions
diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py
index 1422bf7089..14fc282281 100644
--- a/django/core/urlresolvers.py
+++ b/django/core/urlresolvers.py
@@ -311,6 +311,7 @@ class RegexURLResolver(LocaleRegexProvider):
return self._app_dict[language_code]
def resolve(self, path):
+ path = force_text(path) # path may be a reverse_lazy object
tried = []
match = self.regex.search(path)
if match:
diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py
index aef0fa0514..fd0f2cd6c2 100644
--- a/tests/urlpatterns_reverse/tests.py
+++ b/tests/urlpatterns_reverse/tests.py
@@ -8,7 +8,7 @@ import unittest
from django.conf import settings
from django.contrib.auth.models import User
from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist
-from django.core.urlresolvers import (reverse, resolve, get_callable,
+from django.core.urlresolvers import (reverse, reverse_lazy, resolve, get_callable,
get_resolver, NoReverseMatch, Resolver404, ResolverMatch, RegexURLResolver,
RegexURLPattern)
from django.http import HttpRequest, HttpResponseRedirect, HttpResponsePermanentRedirect
@@ -219,6 +219,19 @@ class ResolverTests(unittest.TestCase):
sub_resolver = resolver.namespace_dict['test-ns1'][1]
self.assertIn('<RegexURLPattern list>', repr(sub_resolver))
+ def test_reverse_lazy_object_coercion_by_resolve(self):
+ """
+ Verifies lazy object returned by reverse_lazy is coerced to
+ text by resolve(). Previous to #21043, this would raise a TypeError.
+ """
+ urls = 'urlpatterns_reverse.named_urls'
+ proxy_url = reverse_lazy('named-url1', urlconf=urls)
+ resolver = get_resolver(urls)
+ try:
+ match = resolver.resolve(proxy_url)
+ except TypeError:
+ self.fail('Failed to coerce lazy object to text')
+
def test_non_regex(self):
"""
Verifies that we raise a Resolver404 if what we are resolving doesn't