在 Django 中,如何找出与请求匹配的 URL 模式?
In Django, how to find out what URL pattern matched for a request?
我正在处理一个旧的 Django 项目,其中有很多 URL patterns。有时,我不清楚调度员 运行 是哪个视图。有什么方法可以查看 Django 中特定请求匹配的 URL 模式吗?
您可以使用 resolve(..)
function [Django-doc]。
如果我们定义为urlpatterns
:
from django.urls import path
from app.views import some_view
urlpatterns = [
path('some/<slug:name>', some_view, name='some_view')
]
它将return我们:
>>> resolve('/some/view/')
ResolverMatch(func=app.views.some_view, args=(), kwargs={'name': 'view'}, url_name=some_view, app_names=[], namespaces=[], route=some/<slug:name>/)
因此 return 给我们一个 ResolverMatch
object [Django-doc]。我们可以像这样查询这个对象:
>>> result = resolve('/some/view/')
>>> result.func
<function some_view at 0x7fc09facf0d0>
>>> result.args
()
>>> result.kwargs
{'name': 'view'}
>>> result.url_name
'some_view'
>>> result.app_names
[]
>>> result.namespaces
[]
>>> result.route
'some/<slug:name>/'
这里func
因此持有对将被触发的函数的引用,args
和kwargs
分别持有路径中的位置和命名参数,url_name
视图名称等
如果路径不清楚,可以使用reverse函数代替。
urlpatterns = [
path('some/view', some_view_func, name='some_new_view'),
path('some/<int:pk>', some_view_with_id, name='some_with_id'),
]
没有参数
Note: This only works for url configurations without arguments.
In [1]: reverse('some_new_view')
Out[1]: 'some/view'
将 url 视图名称与参数相匹配
In [1]: reverse('some_with_id', kwargs={'pk': 1})
Out[1]: 'some/1'
我正在处理一个旧的 Django 项目,其中有很多 URL patterns。有时,我不清楚调度员 运行 是哪个视图。有什么方法可以查看 Django 中特定请求匹配的 URL 模式吗?
您可以使用 resolve(..)
function [Django-doc]。
如果我们定义为urlpatterns
:
from django.urls import path
from app.views import some_view
urlpatterns = [
path('some/<slug:name>', some_view, name='some_view')
]
它将return我们:
>>> resolve('/some/view/')
ResolverMatch(func=app.views.some_view, args=(), kwargs={'name': 'view'}, url_name=some_view, app_names=[], namespaces=[], route=some/<slug:name>/)
因此 return 给我们一个 ResolverMatch
object [Django-doc]。我们可以像这样查询这个对象:
>>> result = resolve('/some/view/')
>>> result.func
<function some_view at 0x7fc09facf0d0>
>>> result.args
()
>>> result.kwargs
{'name': 'view'}
>>> result.url_name
'some_view'
>>> result.app_names
[]
>>> result.namespaces
[]
>>> result.route
'some/<slug:name>/'
这里func
因此持有对将被触发的函数的引用,args
和kwargs
分别持有路径中的位置和命名参数,url_name
视图名称等
如果路径不清楚,可以使用reverse函数代替。
urlpatterns = [
path('some/view', some_view_func, name='some_new_view'),
path('some/<int:pk>', some_view_with_id, name='some_with_id'),
]
没有参数
Note: This only works for url configurations without arguments.
In [1]: reverse('some_new_view')
Out[1]: 'some/view'
将 url 视图名称与参数相匹配
In [1]: reverse('some_with_id', kwargs={'pk': 1})
Out[1]: 'some/1'