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

时间:2019-07-11 16:24:16

标签: python django url url-pattern

我正在处理一个带有许多URL patterns的旧Django项目。有时,我不清楚调度员运行哪个视图。有什么方法可以查看Django中特定请求匹配的URL模式吗?

2 个答案:

答案 0 :(得分:1)

您可以使用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保留了对将要触发的函数的引用,argskwargs分别保留了路径中的位置参数和命名参数,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'),
]

不带参数

  

注意:这仅适用于不带参数的url配置。

In [1]: reverse('some_new_view')
Out[1]: 'some/view'

使用参数匹配网址视图名称

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

答案 1 :(得分:0)

是的,请查看include语句,然后转到该目录,并检查views.py和urls.py文件。