Getting a list of all the views of a Django project:
To get all the views present in the Django project, we create the get_all_view_names() function, which takes urlpatterns as input and returns a complete list of the views used in the project as output.
First we import the root_urlconf module using settings.ROOT_URLCONF . Then root_urlconf.urls.urlpatterns will provide us with a list of project urls.
The above list of URLs contains the RegexURLPattern and RegexURLResolver . Accessing .urlpatterns on RegexURLResolver will also give us a list of RegexURLPattern and RegexURLResolver .
The RegexURLPattern object will give us the name of the view that interests us. The callback attribute on it contains the called view. When we pass a string in our URLs, for example, 'foo_app.views.view_name' representing the module path and view function name, or the called view, the callback attribute is set to this. Further access to .func_name will give us the name of the view.
We call the get_all_view_names() function recursively and add the view names received from the RegexURLPattern object to the RegexURLPattern global list.
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 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 a list of all the views in a Django application:
To get a list of all the views present in the Django application, we will use the get_all_view_names() function defined above.
First, we import all the urlpatterns application and pass this list to the get_all_view_names() function.
from my_app.urls import urlpatterns as my_app_urlpatterns
my_app_views gives us a list of all the views presented in my_app Django application.
source share