Getting list of all the views of a Django project:
To get all the views present in a Django project, we create a function get_all_view_names()
which takes urlpatterns
as input and returns the complete list of views being used in the project as the output.
First, we import the root_urlconf
module using settings.ROOT_URLCONF
. Then root_urlconf.urls.urlpatterns
will give us the list of project's urlpatterns.
The above urlpatterns list contains RegexURLPattern
and RegexURLResolver
objects. Accessing .urlpatterns
on a RegexURLResolver
will further give us a list of RegexURLPattern
and RegexURLResolver
objects.
A RegexURLPattern
object will give us the view name which we are interested in. The callback
attribute on it contains the callable view. When we pass either a string in our urls like 'foo_app.views.view_name'
representing the path to a module and a view function name, or a callable view, then callback
attribute is set to this. Further accessing .func_name
will give us the view name.
We call the function get_all_view_names()
recursively and add the view names obtained from a RegexURLPattern
object to a global list 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)
Getting list of all the views in a Django application:
To get the list of all the views present in a Django application, we will use the get_all_view_names()
function defined above.
We will first import all the urlpatterns
of the application and pass this list to the get_all_view_names()
function.
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
gives us the list of all the views present in my_app
Django app.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…