Как получить имя url из пути django url?
В моем представлении я экспортирую main_url_patterns из моего приложения и хочу обработать этот список, чтобы получить две части в разных списках:
- URL путь
- URL name
Так что в моем представлении я делаю что-то вроде этого:
def siteurls_view(request):
path_list=urls.main_urlpatterns
url_list=[]
for p in path_list:
print(p, type(p),p[0])
Где urls.main_urlpatterns находится:
path('consumptions_points/send/', views.send_consumptions_points_view, name='send_consumptions_points'),
path('consumptions/', views.consumptions_view, name='consumptions'),
path('consumptions/new/', views.consumptions_new_view, name='consumptions_new'),
path('consumptions/get_tx/', views.get_tx_consumption_view, name='get_tx_consumption'),
path('consumptions/send/', views.send_consumptions_view, name='send_consumptions')
Я хотел бы получить, например, все имена из прошлого и вставить их в новый список.
Большое спасибо
Существует сценарий, созданный @Cesar Canassa, и он выглядит следующим образом:
from django.conf import settings
from django.urls import URLPattern, URLResolver
urlconf = __import__(settings.ROOT_URLCONF, {}, {}, [''])
def list_urls(lis, acc=None):
if acc is None:
acc = []
if not lis:
return
l = lis[0]
if isinstance(l, URLPattern):
yield acc + [str(l.pattern)]
elif isinstance(l, URLResolver):
yield from list_urls(l.url_patterns, acc + [str(l.pattern)])
yield from list_urls(lis[1:], acc)
for p in list_urls(urlconf.urlpatterns):
print(''.join(p))
Данный код печатает все URL, в отличие от некоторых других решений он печатает полный путь, а не только последний узел. Если вы хотите добавить names
, то измените
yield acc + [str(l.pattern)]
print(''.join(p))
с:
yield acc + [str(l.pattern)], l.callback
print(''.join(p[0]))
но имейте в виду, что это выводит имя функции представления, а не name