186

「リバース」が調べている現在の urlpatterns を確認するにはどうすればよいですか?

ビューでリバースを呼び出していますが、機能すると思われる引数を使用していますが、機能しません。そこに何があり、なぜ私のパターンがないのかを確認する方法はありますか?

4

19 に答える 19

258

プロジェクト内のすべての URL のリストが必要な場合は、最初に django-extensions をインストールする必要があります

コマンドで簡単にインストールできます。

pip install django-extensions

パッケージに関連する詳細については、django-extensionsに移動してください

その後、次のようにファイルに追加django_extensionsINSTALLED_APPSます。settings.py

INSTALLED_APPS = (
...
'django_extensions',
...
)

urls.py の例:

from django.urls import path, include
from . import views
from . import health_views

urlpatterns = [
    path('get_url_info', views.get_url_func),
    path('health', health_views.service_health_check),
    path('service-session/status', views.service_session_status)
]

そして、ターミナルでいずれかのコマンドを実行します

python manage.py show_urls

また

./manage.py show_urls

構成 urls.py に基づく出力例:

/get_url_info             django_app.views.get_url_func
/health                   django_app.health_views.service_health_check
/service-session/status   django_app.views.service_session_status

詳細については、ドキュメントを確認してください。

于 2012-01-13T01:34:08.467 に答える
103

これを試して:

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()
于 2009-08-14T01:25:00.837 に答える
16

アクティブステートにレシピがあります

import urls

def show_urls(urllist, depth=0):
    for entry in urllist:
        print("  " * depth, entry.regex.pattern)
        if hasattr(entry, 'url_patterns'):
            show_urls(entry.url_patterns, depth + 1)

show_urls(urls.url_patterns)
于 2014-05-26T16:06:15.373 に答える
10

私が使用しているプラ​​グインがあります: https ://github.com/django-extensions/django-extensions 、それは役立つかもしれないshow_urlsコマンドを持っています。

于 2009-08-14T05:45:10.510 に答える
1

Django >= 2.0 リスト ソリューション

@CesarCanassa から採用

from django.conf import settings
from django.urls import URLPattern, URLResolver

URLCONF = __import__(settings.ROOT_URLCONF, {}, {}, [''])

def list_urls(patterns, path=None):
    """ recursive """
    if not path:
        path = []
    result = []
    for pattern in patterns:
        if isinstance(pattern, URLPattern):
            result.append(''.join(path) + str(pattern.pattern))
        elif isinstance(pattern, URLResolver):
            result += list_urls(pattern.url_patterns, path + [str(pattern.pattern)])
    return result
于 2020-08-20T13:01:32.393 に答える