我怎么能看到当前的urlpatterns“反向”正在寻找?
我在一个视图中调用了逆向,我认为这个论证应该成立,但实际上并不成立。有什么办法能让我知道为什么我的图案没有?
我怎么能看到当前的urlpatterns“反向”正在寻找?
我在一个视图中调用了逆向,我认为这个论证应该成立,但实际上并不成立。有什么办法能让我知道为什么我的图案没有?
当前回答
有一个我使用的插件:https://github.com/django-extensions/django-extensions,它有一个show_urls命令可以帮助。
其他回答
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
试试这个:
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()
这里有一个快速而肮脏的黑客,只需获得你需要的信息,而不需要修改任何设置。
$ pip install django-extensions
$ python manage.py shell -c 'from django.core.management import call_command; from django_extensions.management.commands.show_urls import Command; call_command(Command())'
这是小猪在逃避@robert的回答。虽然是正确的,但我不想让django扩展成为依赖项,哪怕只是一秒钟。
有一个我使用的插件:https://github.com/django-extensions/django-extensions,它有一个show_urls命令可以帮助。
django 2.0的极简解决方案
例如,如果你正在寻找installed_apps的第一个应用程序上的url,你可以像这样访问它:
from django.urls import get_resolver
from pprint import pprint
pprint(
get_resolver().url_patterns[0].url_patterns
)