Created
March 9, 2018 08:56
-
-
Save SteadBytes/a155bf1b679315ef5c5a6ea73cf96a04 to your computer and use it in GitHub Desktop.
Programatically retrieve Django View names from urlconfs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.urls import URLResolver, URLPattern, include | |
from django.conf import settings | |
from importlib import import_module | |
def view_names_from_urlpatterns(urlpatterns, names=None): | |
""" Get all view names specified by a set of given urlpatterns | |
# import some urlpatterns | |
>>> from myapp.urls import urlpatterns | |
>>> urlpatterns | |
[<URLPattern '' [name='home']>, <URLPattern 'contact/' [name='contact']>, | |
<URLPattern 'items/<slug:slug>/' [name='item_detail']> ] | |
>>> view_names_from_urlpatterns(urlpatterns) | |
['home', 'contact', 'item_detail'] | |
Args: | |
urlpatterns (list): List of valid Django urlpatterns | |
names: Used to recursively build list -> ignore | |
Returns: | |
(list of str): View names | |
""" | |
if names is None: | |
names = [] | |
for pattern in urlpatterns: | |
if isinstance(pattern, URLResolver): | |
view_names_from_urlpatterns(pattern.url_patterns, names) | |
elif isinstance(pattern, URLPattern): | |
names.append(pattern.callback.__name__) | |
return names | |
def view_names_from_urlconf(module): | |
""" Get all viewnames specified in the urlconf of an app. | |
Retrieves urlconf similarly to django `include()` see: | |
https://docs.djangoproject.com/en/2.0/_modules/django/conf/urls/#include | |
Args: | |
module (str): urlconf module location i.e. `'myapp.urls'` | |
""" | |
urlconf_module = import_module(module) | |
patterns = urlconf_module.urlpatterns | |
return view_names_from_urlpatterns(patterns) | |
def get_all_view_names(): | |
all_urlpatterns = __import__(settings.ROOT_URLCONF).urls.urlpatterns | |
return view_names_from_urlpatterns(all_urlpatterns) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment