我怎么能看到当前的urlpatterns“反向”正在寻找?
我在一个视图中调用了逆向,我认为这个论证应该成立,但实际上并不成立。有什么办法能让我知道为什么我的图案没有?
我怎么能看到当前的urlpatterns“反向”正在寻找?
我在一个视图中调用了逆向,我认为这个论证应该成立,但实际上并不成立。有什么办法能让我知道为什么我的图案没有?
当前回答
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')
]
其他回答
如果你想要一个项目中所有url的列表,首先你需要安装django-extensions
您可以使用命令简单地安装。
pip install django-extensions
有关包goto django-extensions的更多信息
之后,在settings.py文件中的INSTALLED_APPS中添加django_extensions,如下所示:
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
or
./manage.py show_urls
基于config 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
有关更多信息,您可以查看文档。
在Django 3.0中,这很简单:
from django.urls import get_resolver
print(get_resolver().url_patterns)
指纹: < urltern " >, < urltern '/测试"[另一个名称]>
只要输入一个你知道不存在的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 2.0的极简解决方案
例如,如果你正在寻找installed_apps的第一个应用程序上的url,你可以像这样访问它:
from django.urls import get_resolver
from pprint import pprint
pprint(
get_resolver().url_patterns[0].url_patterns
)