summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilfred Hughes <me@wilfred.me.uk>2013-06-13 13:55:18 +0100
committerMarc Tamlyn <marc.tamlyn@gmail.com>2013-06-14 10:26:30 +0100
commit8365ed08b83591bf6d7ddb3b3cb066d8325573bb (patch)
tree20a1b220f89bd86657936d3398ed9ad149687b72
parent0f3f88ec945b2f6728b9ed04e27c5fa4bcc43898 (diff)
Fixed #17076 -- When reversing a URL fails, inform the user which patterns were tried.
-rw-r--r--django/core/urlresolvers.py5
-rw-r--r--tests/urlpatterns_reverse/tests.py14
2 files changed, 18 insertions, 1 deletions
diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py
index d58f2a9fa3..b7017e47b9 100644
--- a/django/core/urlresolvers.py
+++ b/django/core/urlresolvers.py
@@ -422,8 +422,11 @@ class RegexURLResolver(LocaleRegexProvider):
lookup_view_s = "%s.%s" % (m, n)
else:
lookup_view_s = lookup_view
+
+ patterns = [pattern for (possibility, pattern, defaults) in possibilities]
raise NoReverseMatch("Reverse for '%s' with arguments '%s' and keyword "
- "arguments '%s' not found." % (lookup_view_s, args, kwargs))
+ "arguments '%s' not found. %d pattern(s) tried: %s" %
+ (lookup_view_s, args, kwargs, len(patterns), patterns))
class LocaleRegexURLResolver(RegexURLResolver):
"""
diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py
index f54c796d30..3962f69288 100644
--- a/tests/urlpatterns_reverse/tests.py
+++ b/tests/urlpatterns_reverse/tests.py
@@ -192,6 +192,20 @@ class URLPatternReverse(TestCase):
self.assertEqual('/%7Eme/places/1/',
reverse('places', args=[1], prefix='/~me/'))
+ def test_patterns_reported(self):
+ # Regression for #17076
+ try:
+ # this url exists, but requires an argument
+ reverse("people", args=[])
+ except NoReverseMatch as e:
+ pattern_description = r"1 pattern(s) tried: ['people/(?P<name>\\w+)/$']"
+ self.assertIn(pattern_description, str(e))
+ else:
+ # we can't use .assertRaises, since we want to inspect the
+ # exception
+ self.fail("Expected a NoReverseMatch, but none occurred.")
+
+
class ResolverTests(unittest.TestCase):
def test_resolver_repr(self):
"""