summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2010-01-10 18:44:39 +0000
committerAdrian Holovaty <adrian@holovaty.com>2010-01-10 18:44:39 +0000
commit2ef52d0ce20da72e2728fa7d7cdb129935e26ac8 (patch)
treefed8ac22e41022f7a22a18469f1e17f68661ca12
parentcc25361b17fbc0d3622bb7562f90f1ac856aa363 (diff)
Fixed #11960 -- Improved error message for redirects. Thanks, mattmcc
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12185 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/shortcuts/__init__.py3
-rw-r--r--tests/regressiontests/urlpatterns_reverse/tests.py6
2 files changed, 9 insertions, 0 deletions
diff --git a/django/shortcuts/__init__.py b/django/shortcuts/__init__.py
index 823c6bb5e7..119bd092b5 100644
--- a/django/shortcuts/__init__.py
+++ b/django/shortcuts/__init__.py
@@ -49,6 +49,9 @@ def redirect(to, *args, **kwargs):
try:
return redirect_class(urlresolvers.reverse(to, args=args, kwargs=kwargs))
except urlresolvers.NoReverseMatch:
+ # If this is a callable, re-raise.
+ if callable(to):
+ raise
# If this doesn't "feel" like a URL, re-raise.
if '/' not in to and '.' not in to:
raise
diff --git a/tests/regressiontests/urlpatterns_reverse/tests.py b/tests/regressiontests/urlpatterns_reverse/tests.py
index 1dc85b0424..d5f3ec9546 100644
--- a/tests/regressiontests/urlpatterns_reverse/tests.py
+++ b/tests/regressiontests/urlpatterns_reverse/tests.py
@@ -165,6 +165,12 @@ class ReverseShortcutTests(TestCase):
res = redirect('http://example.com/')
self.assertEqual(res['Location'], 'http://example.com/')
+ def test_redirect_view_object(self):
+ from views import absolute_kwargs_view
+ res = redirect(absolute_kwargs_view)
+ self.assertEqual(res['Location'], '/absolute_arg_view/')
+ self.assertRaises(NoReverseMatch, redirect, absolute_kwargs_view, wrong_argument=None)
+
class NamespaceTests(TestCase):
urls = 'regressiontests.urlpatterns_reverse.namespace_urls'