Skip to content

Instantly share code, notes, and snippets.

@SteadBytes
Created March 9, 2018 08:56
Show Gist options
  • Save SteadBytes/a155bf1b679315ef5c5a6ea73cf96a04 to your computer and use it in GitHub Desktop.
Save SteadBytes/a155bf1b679315ef5c5a6ea73cf96a04 to your computer and use it in GitHub Desktop.
Programatically retrieve Django View names from urlconfs
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