mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16:09 +00:00
Fixed #29296 -- Fixed crashes in admindocs when a view is a callable object.
This commit is contained in:
@@ -2,6 +2,8 @@ from django.conf import settings
|
||||
from django.http import HttpResponse
|
||||
from django.utils.deprecation import MiddlewareMixin
|
||||
|
||||
from .utils import get_view_name
|
||||
|
||||
|
||||
class XViewMiddleware(MiddlewareMixin):
|
||||
"""
|
||||
@@ -24,5 +26,5 @@ class XViewMiddleware(MiddlewareMixin):
|
||||
if request.method == 'HEAD' and (request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS or
|
||||
(request.user.is_active and request.user.is_staff)):
|
||||
response = HttpResponse()
|
||||
response['X-View'] = "%s.%s" % (view_func.__module__, view_func.__name__)
|
||||
response['X-View'] = get_view_name(view_func)
|
||||
return response
|
||||
|
||||
@@ -18,6 +18,12 @@ else:
|
||||
docutils_is_available = True
|
||||
|
||||
|
||||
def get_view_name(view_func):
|
||||
mod_name = view_func.__module__
|
||||
view_name = getattr(view_func, '__qualname__', view_func.__class__.__name__)
|
||||
return mod_name + '.' + view_name
|
||||
|
||||
|
||||
def trim_docstring(docstring):
|
||||
"""
|
||||
Uniformly trim leading/trailing whitespace from docstrings.
|
||||
|
||||
@@ -23,6 +23,8 @@ from django.utils.inspect import (
|
||||
from django.utils.translation import gettext as _
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from .utils import get_view_name
|
||||
|
||||
# Exclude methods starting with these strings from documentation
|
||||
MODEL_METHODS_EXCLUDE = ('_', 'add_', 'delete', 'save', 'set_')
|
||||
|
||||
@@ -124,18 +126,13 @@ class TemplateFilterIndexView(BaseAdminDocsView):
|
||||
class ViewIndexView(BaseAdminDocsView):
|
||||
template_name = 'admin_doc/view_index.html'
|
||||
|
||||
@staticmethod
|
||||
def _get_full_name(func):
|
||||
mod_name = func.__module__
|
||||
return '%s.%s' % (mod_name, func.__qualname__)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
views = []
|
||||
urlconf = import_module(settings.ROOT_URLCONF)
|
||||
view_functions = extract_views_from_urlpatterns(urlconf.urlpatterns)
|
||||
for (func, regex, namespace, name) in view_functions:
|
||||
views.append({
|
||||
'full_name': self._get_full_name(func),
|
||||
'full_name': get_view_name(func),
|
||||
'url': simplify_regex(regex),
|
||||
'url_name': ':'.join((namespace or []) + (name and [name] or [])),
|
||||
'namespace': ':'.join((namespace or [])),
|
||||
|
||||
Reference in New Issue
Block a user