как получить список всех представлений в приложении django?
есть ли способ получить список всех представлений в приложении django? Я погуглил для ответа. Все ответы показывают способ получить список URL-адресов.
2 ответов
получение списка всех представлений проекта Django:
чтобы получить все представления, присутствующие в проекте Django, мы создаем функцию get_all_view_names() что происходит urlpatterns в качестве входных данных и возвращает полный список представлений, используемых в проекте в качестве выходных данных.
во-первых, мы импортируем root_urlconf модуль с помощью settings.ROOT_URLCONF. Тогда root_urlconf.urls.urlpatterns даст нам список urlpatterns проекта.
приведенный выше список urlpatterns содержит RegexURLPattern и RegexURLResolver объекты. Доступ .urlpatterns на RegexURLResolver далее даст нам список RegexURLPattern и RegexURLResolver объекты. 
A
добавление выше исправить Рахул, если кто-то использует Питон3, вам нужно будет использовать __name__ вместо func_name:
...
            view_name = pattern.callback.__name__
...
в противном случае вы получите следующее:
AttributeError: 'function' object has no attribute 'get_all_view_names'
(спасибо scipy-gitbot at https://github.com/scipy/scipy/issues/2101#issuecomment-17027406
в качестве альтернативы, если вы не склонны использовать глобальные переменные, вот что я в конечном итоге использование:
all_urlpatterns = __import__(settings.ROOT_URLCONF).urls.urlpatterns
detail_views_list = []
def get_all_view_names(urlpatterns):
    for pattern in urlpatterns:
        if isinstance(pattern, RegexURLResolver):
            get_all_view_names(pattern.url_patterns)
        elif isinstance(pattern, RegexURLPattern):
            detail_views_list.append(pattern.callback.__name__)
get_all_view_names(all_urlpatterns)
all_views_list = []
# remove redundant entries and specific ones we don't care about
for each in detail_views_list:
    if each not in "serve add_view change_view changelist_view history_view delete_view RedirectView":
        if each not in all_views_list:
            all_views_list.append(each)
тогда вы можете просто повторить через all_views_list чтобы получить список отфильтрованных.
обновление: 1 марта 2018
В Django 2.0, django.core.urlresolvers переехал в django.urls. RegexURLPattern и RegexURLResolver переименованы в URLPattern и URLResolver. Поэтому вы должны использовать 
from django.urls import URLResolver, URLPattern
вместо
from django.core.urlresolvers import RegexURLResolver, RegexURLPattern
если вы используете Django 2.
