mirror of
https://github.com/django/django.git
synced 2025-10-26 23:26:08 +00:00
Fixed reverse URL lookup using functions when the original URL pattern was a
string. This is now just as fragile as it was prior to [5609], but works in a few cases that people were relying on, apparently. git-svn-id: http://code.djangoproject.com/svn/django/trunk@5632 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -38,29 +38,27 @@ def get_callable(lookup_view, can_fail=False):
|
||||
If can_fail is True, lookup_view might be a URL pattern label, so errors
|
||||
during the import fail and the string is returned.
|
||||
"""
|
||||
try:
|
||||
# Bail out early if lookup_view is not ASCII. This can't be a function.
|
||||
lookup_view = lookup_view.encode('ascii')
|
||||
|
||||
if not callable(lookup_view):
|
||||
if not callable(lookup_view):
|
||||
try:
|
||||
# Bail early for non-ASCII strings (they can't be functions).
|
||||
lookup_view = lookup_view.encode('ascii')
|
||||
mod_name, func_name = get_mod_func(lookup_view)
|
||||
try:
|
||||
if func_name != '':
|
||||
lookup_view = getattr(__import__(mod_name, {}, {}, ['']), func_name)
|
||||
except (ImportError, AttributeError):
|
||||
if not can_fail:
|
||||
raise
|
||||
except UnicodeEncodeError:
|
||||
pass
|
||||
if func_name != '':
|
||||
lookup_view = getattr(__import__(mod_name, {}, {}, ['']), func_name)
|
||||
except (ImportError, AttributeError):
|
||||
if not can_fail:
|
||||
raise
|
||||
except UnicodeEncodeError:
|
||||
pass
|
||||
return lookup_view
|
||||
get_callable = memoize(get_callable, _callable_cache)
|
||||
get_callable = memoize(get_callable, _callable_cache, 1)
|
||||
|
||||
def get_resolver(urlconf):
|
||||
if urlconf is None:
|
||||
from django.conf import settings
|
||||
urlconf = settings.ROOT_URLCONF
|
||||
return RegexURLResolver(r'^/', urlconf)
|
||||
get_resolver = memoize(get_resolver, _resolver_cache)
|
||||
get_resolver = memoize(get_resolver, _resolver_cache, 1)
|
||||
|
||||
def get_mod_func(callback):
|
||||
# Converts 'django.views.news.stories.story_detail' to
|
||||
|
||||
Reference in New Issue
Block a user