summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2008-08-28 19:05:14 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2008-08-28 19:05:14 +0000
commita46d3ebfccdd47dd8c915125d0ba5f29b88ffe08 (patch)
tree98fb78d3b8c867524a08f9e4cd9e41b1695a3a97
parent10244d1c040d4662e0c93ccdc9e0238d33f85ece (diff)
Fixed #8221: added some better `NoReverseMatch` error strings. Thanks, mrts.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8672 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--AUTHORS1
-rw-r--r--django/core/urlresolvers.py17
2 files changed, 12 insertions, 6 deletions
diff --git a/AUTHORS b/AUTHORS
index cd3190b2d7..2428f6a9ac 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -383,6 +383,7 @@ answer newbie questions, and generally made Django that much better:
Swaroop C H <http://www.swaroopch.info>
Aaron Swartz <http://www.aaronsw.com/>
Ville Säävuori <http://www.unessa.net/>
+ Mart Sõmermaa <http://mrts.pri.ee/>
Christian Tanzer <tanzer@swing.co.at>
Tyler Tarabula <tyler.tarabula@gmail.com>
Tyson Tate <tyson@fallingbullets.com>
diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py
index 950d387caa..c861c703a3 100644
--- a/django/core/urlresolvers.py
+++ b/django/core/urlresolvers.py
@@ -52,6 +52,8 @@ def get_callable(lookup_view, can_fail=False):
mod_name, func_name = get_mod_func(lookup_view)
if func_name != '':
lookup_view = getattr(__import__(mod_name, {}, {}, ['']), func_name)
+ if not callable(lookup_view):
+ raise AttributeError("'%s.%s' is not a callable." % (mod_name, func_name))
except (ImportError, AttributeError):
if not can_fail:
raise
@@ -196,10 +198,12 @@ class RegexURLPattern(object):
mod_name, func_name = get_mod_func(viewname)
try:
lookup_view = getattr(__import__(mod_name, {}, {}, ['']), func_name)
- except (ImportError, AttributeError):
- raise NoReverseMatch
+ except ImportError, e:
+ raise NoReverseMatch("Could not import '%s': %s" % (mod_name, e))
+ except AttributeError, e:
+ raise NoReverseMatch("'%s' has no attribute '%s'" % (mod_name, func_name))
if lookup_view != self.callback:
- raise NoReverseMatch
+ raise NoReverseMatch("Reversed view '%s' doesn't match the expected callback ('%s')." % (viewname, self.callback))
return self.reverse_helper(*args, **kwargs)
def reverse_helper(self, *args, **kwargs):
@@ -279,11 +283,12 @@ class RegexURLResolver(object):
def reverse(self, lookup_view, *args, **kwargs):
try:
lookup_view = get_callable(lookup_view, True)
- except (ImportError, AttributeError):
- raise NoReverseMatch("'%s' is not a callable." % lookup_view)
+ except (ImportError, AttributeError), e:
+ raise NoReverseMatch("Error importing '%s': %s." % (lookup_view, e))
if lookup_view in self.reverse_dict:
return u''.join([reverse_helper(part.regex, *args, **kwargs) for part in self.reverse_dict[lookup_view]])
- raise NoReverseMatch("Reverse for '%s' not found." % lookup_view)
+ raise NoReverseMatch("Reverse for '%s' with arguments '%s' and keyword "
+ "arguments '%s' not found." % (lookup_view, args, kwargs))
def reverse_helper(self, lookup_view, *args, **kwargs):
sub_match = self.reverse(lookup_view, *args, **kwargs)