Skip to main content
 首页 » 编程设计

python之在 Django 中,如何找出与请求匹配的 URL 模式

2024年11月24日22xiaohuochai

我正在处理一个旧的 Django 项目,其中有很多 URL patterns .有时,我不清楚调度员运行的是哪个 View 。有什么方法可以查看 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') 
]

它将返回给我们:

>>> resolve('/some/view/') 
ResolverMatch(func=app.views.some_view, args=(), kwargs={'name': 'view'}, url_name=some_view, app_names=[], namespaces=[], route=some/<slug:name>/) 

因此它返回给我们一个 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 View 的名称等

如果路径不清楚,可以使用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 View 名称与参数匹配

In [1]: reverse('some_with_id', kwargs={'pk': 1}) 
Out[1]: 'some/1'