diff options
| author | Markus Holtermann <info@markusholtermann.eu> | 2014-10-04 19:04:21 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-10-06 09:31:39 -0400 |
| commit | 2f16ff5a6cbd71fc6c50e88e4087f3657222e90e (patch) | |
| tree | b407362fde4e16ee4ea53ce4346e13bd4fd2ed23 /django | |
| parent | a24cf217220dca44b7bd5b36ad9c14a96bca486e (diff) | |
Fixed #23601 -- Ensured view exists in URLconf before importing it in admindocs.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/admindocs/views.py | 7 | ||||
| -rw-r--r-- | django/core/urlresolvers.py | 7 |
2 files changed, 10 insertions, 4 deletions
diff --git a/django/contrib/admindocs/views.py b/django/contrib/admindocs/views.py index f2b6535ae5..6cd5df1e5c 100644 --- a/django/contrib/admindocs/views.py +++ b/django/contrib/admindocs/views.py @@ -143,10 +143,11 @@ class ViewDetailView(BaseAdminDocsView): def get_context_data(self, **kwargs): view = self.kwargs['view'] - mod, func = urlresolvers.get_mod_func(view) - try: + urlconf = urlresolvers.get_urlconf() + if urlresolvers.get_resolver(urlconf)._is_callback(view): + mod, func = urlresolvers.get_mod_func(view) view_func = getattr(import_module(mod), func) - except (ImportError, AttributeError): + else: raise Http404 title, body, metadata = utils.parse_docstring(view_func.__doc__) if title: diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py index 6cd612e208..eff7e078e4 100644 --- a/django/core/urlresolvers.py +++ b/django/core/urlresolvers.py @@ -353,6 +353,11 @@ class RegexURLResolver(LocaleRegexProvider): self._populate() return self._app_dict[language_code] + def _is_callback(self, name): + if not self._populated: + self._populate() + return name in self._callback_strs + def resolve(self, path): path = force_text(path) # path may be a reverse_lazy object tried = [] @@ -430,7 +435,7 @@ class RegexURLResolver(LocaleRegexProvider): original_lookup = lookup_view try: - if lookup_view in self._callback_strs: + if self._is_callback(lookup_view): lookup_view = get_callable(lookup_view, True) except (ImportError, AttributeError) as e: raise NoReverseMatch("Error importing '%s': %s." % (lookup_view, e)) |
