Как получить имя url из пути django url?

В моем представлении я экспортирую main_url_patterns из моего приложения и хочу обработать этот список, чтобы получить две части в разных списках:

  1. URL путь
  2. 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

Вернуться на верх