gpt4 book ai didi

django - 如何获取 django 应用程序中所有 View 的列表?

转载 作者:行者123 更新时间:2023-12-02 07:57:32 28 4
gpt4 key购买 nike

有没有办法获取 django 应用程序中所有 View 的列表?我已经用谷歌搜索了答案。所有答案都显示了获取网址列表的方法。

最佳答案

获取 Django 项目的所有 View 列表:

为了获取 Django 项目中存在的所有 View ,我们创建了一个函数 get_all_view_names() ,它将 urlpatterns 作为输入并返回正在使用的 View 的完整列表。项目作为输出。

首先,我们使用 settings.ROOT_URLCONF 导入 root_urlconf 模块。然后 root_urlconf.urls.urlpatterns 将为我们提供项目的 urlpatterns 列表。

上面的 urlpatterns 列表包含 RegexURLPatternRegexURLResolver 对象。访问 RegexURLResolver 上的 .urlpatterns 将进一步为我们提供 RegexURLPatternRegexURLResolver 对象的列表。

RegexURLPattern 对象将为我们提供我们感兴趣的 View 名称。它的 callback 属性包含可调用 View 。当我们在 url 中传递一个字符串(例如表示模块路径和 View 函数名称的 'foo_app.views.view_name')或可调用 View 时,callback属性设置为此。进一步访问 .func_name 将为我们提供 View 名称。

我们递归调用函数get_all_view_names(),并将从RegexURLPattern对象获取的 View 名称添加到全局列表VIEW_NAMES .

from django.conf import settings
from django.core.urlresolvers import RegexURLResolver, RegexURLPattern

root_urlconf = __import__(settings.ROOT_URLCONF) # import root_urlconf module
all_urlpatterns = root_urlconf.urls.urlpatterns # project's urlpatterns
VIEW_NAMES = [] # maintain a global list

def get_all_view_names(urlpatterns):
global VIEW_NAMES
for pattern in urlpatterns:
if isinstance(pattern, RegexURLResolver):
get_all_view_names(pattern.url_patterns) # call this function recursively
elif isinstance(pattern, RegexURLPattern):
view_name = pattern.callback.func_name # get the view name
VIEW_NAMES.append(view_name) # add the view to the global list
return VIEW_NAMES

get_all_view_names(all_urlpatterns)

获取 Django 应用程序中所有 View 的列表:

要获取 Django 应用程序中存在的所有 View 的列表,我们将使用上面定义的 get_all_view_names() 函数。

我们将首先导入应用程序的所有 urlpatterns 并将此列表传递给 get_all_view_names() 函数。

from my_app.urls import urlpatterns as my_app_urlpatterns # import urlpatterns of the app

my_app_views = get_all_view_names(my_app_urlpatterns) # call the function with app's urlpatterns as the argument

my_app_views 为我们提供了 my_app Django 应用程序中存在的所有 View 的列表。

关于django - 如何获取 django 应用程序中所有 View 的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32933229/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com