我怎么能看到当前的urlpatterns“反向”正在寻找?
我在一个视图中调用了逆向,我认为这个论证应该成立,但实际上并不成立。有什么办法能让我知道为什么我的图案没有?
我怎么能看到当前的urlpatterns“反向”正在寻找?
我在一个视图中调用了逆向,我认为这个论证应该成立,但实际上并不成立。有什么办法能让我知道为什么我的图案没有?
当前回答
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文件的应用程序名称
其他回答
有一个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)
试试这个:
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()
有一个我使用的插件: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
)
在Django 3.0中,这很简单:
from django.urls import get_resolver
print(get_resolver().url_patterns)
指纹: < urltern " >, < urltern '/测试"[另一个名称]>