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

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


当前回答

试试这个:

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()

其他回答

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

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

输入

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

试试这个:

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()
import subprocces

res = subprocess.run(
    'python manage.py show_urls',
    capture_output=True,
    shell=True,
)
url_list = [
    line.split('\t')[0]
    for line in res.stdout.decode().split('\n')
]

在Django 3.0中,这很简单:

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

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

Django 1.8, Python 2.7+ 只需在Shell中运行这些命令。Python manage.py shell并执行以下代码。

from django.conf.urls import RegexURLPattern, RegexURLResolver
from django.core import urlresolvers
urls = urlresolvers.get_resolver(None)

def if_none(value):
    if value:
        return value
    return ''

def print_urls(urls, parent_pattern=None):
    for url in urls.url_patterns:
        if isinstance(url, RegexURLResolver):
            print_urls(url, if_none(parent_pattern) + url.regex.pattern)
        elif isinstance(url, RegexURLPattern):
            print(if_none(parent_pattern) + url.regex.pattern)

print_urls(urls)