Django: Как я могу видеть список urlpatterns?

Недостаток поддержки пользовательских тайм-аутов на уровне запросов всегда был недостатком HttpClient в моем сознании. Если вы не возражаете против небольшой зависимости от библиотеки, Flurl.Http [отказ от ответственности: я автор] поддерживает это напрямую:

"http://api.com/endpoint".WithTimeout(30).GetJsonAsync();

Это истинный запрос, настройка уровня; все вызовы одного и того же хоста используют общий экземпляр HttpClient под капотом, а одновременные вызовы с разными тайм-аутами не конфликтуют. Существует настраиваемое глобальное значение по умолчанию (сначала 100 секунд, так же как HttpClient).

98
задан interstar 14 August 2009 в 00:49
поделиться

4 ответа

Можно создать динамический импорт для сбора всех Шаблонов URL из каждого приложения в проекте с простым методом как так:

def get_url_patterns():
    from django.apps import apps

    list_of_all_url_patterns = list()
    for name, app in apps.app_configs.items():
        # you have a directory structure where you should be able to build the correct path
        # my example shows that apps.[app_name].urls is where to look
        mod_to_import = f'apps.{name}.urls'
        try:
            urls = getattr(importlib.import_module(mod_to_import), "urlpatterns")
            list_of_all_url_patterns.extend(urls)
        except ImportError as ex:
            # is an app without urls
            pass

    return list_of_all_url_patterns

list_of_all_url_patterns = get_url_patterns()

я недавно использовал что-то вроде этого для создания тега шаблона для показа активных навигационных ссылок.

0
ответ дан 24 November 2019 в 04:05
поделиться
from django.urls.resolvers import RegexPattern,RoutePattern
from your_main_app import urls

def get_urls():
    url_list = []
    for url in urls.urlpatterns:
        url_list.append(url.pattern._regex) if isinstance(url.pattern, RegexPattern) else url_list.append(url.pattern._route)

    return url_list

Здесь your_main_app название приложения, куда Ваш settings.py файл помещается

0
ответ дан 24 November 2019 в 04:05
поделиться

Попробуйте следующее:

from django.urls import get_resolver
get_resolver().reverse_dict.keys()

Или, если вы все еще используете Django 1. *:

from django.core.urlresolvers import get_resolver
get_resolver(None).reverse_dict.keys()
67
ответ дан 24 November 2019 в 04:05
поделиться

Я использую плагин: https://github.com/django-extensions/django-extensions , в нем есть команда show_urls, которая может помочь.

8
ответ дан 24 November 2019 в 04:05
поделиться