我怎么能看到当前的urlpatterns“反向”正在寻找?

我在一个视图中调用了逆向,我认为这个论证应该成立,但实际上并不成立。有什么办法能让我知道为什么我的图案没有?


当前回答

有一个我使用的插件:https://github.com/django-extensions/django-extensions,它有一个show_urls命令可以帮助。

其他回答

只要输入一个你知道不存在的url,服务器就会返回一个错误消息,其中包含一个url模式列表。

例如,如果你在http://localhost:8000/something上运行一个网站

输入

http://localhost:8000/something/blahNonsense,您的服务器将返回url搜索列表并在浏览器中显示它

def get_resolved_urls(url_patterns):
    url_patterns_resolved = []
    for entry in url_patterns:
        if hasattr(entry, 'url_patterns'):
            url_patterns_resolved += get_resolved_urls(
                entry.url_patterns)
        else:
            url_patterns_resolved.append(entry)
    return url_patterns_resolved

在python中manage.py shell

import urls
get_resolved_urls(urls.urlpatterns)

在Django 3.0中,这很简单:

from django.urls import get_resolver
print(get_resolver().url_patterns)

指纹: < urltern " >, < urltern '/测试"[另一个名称]>

有一个activestate的配方

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)

django 2.0的极简解决方案

例如,如果你正在寻找installed_apps的第一个应用程序上的url,你可以像这样访问它:

from django.urls import get_resolver
from pprint import pprint

pprint(
    get_resolver().url_patterns[0].url_patterns
)