Django:URL分派

2024-03-28 15:09:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试配置Django url调度程序。我希望/results呈现我的results模板,而/results/3呈现我的user_results模板,例如参数为3。如果我使用以下代码:

url(r'^results/', views.results, name='results'),
url(r'^results/(\d+)/$', views.user_results, name='user_results')

然后/results/results/3都只加载呈现results模板。但是,如果我注释掉第一行,那么/results/3将按预期呈现user_results模板。你知道吗

为什么/results/3只匹配第二个url而忽略了第一个url?你知道吗


Tags: django代码name程序模板url参数调度
1条回答
网友
1楼 · 发布于 2024-03-28 15:09:21

/results/3与url模式匹配,因为正则表达式没有字符串$的结尾。请注意以下内容之间的区别:

>>> import re
>>> re.match(r'^results/', 'results/3')  # no end of string $
<_sre.SRE_Match object at 0x02BFD3D8>
>>> re.match(r'^results/$', 'results/3')

最简单的(可能也是最好的)方法是在第一个url模式中添加一个字符串结尾$

url(r'^results/$', views.results, name='results'),
url(r'^results/(\d+)/$', views.user_results, name='user_results')

你可以反转你的url模式。一旦找到匹配的url模式,dispatcher将停止搜索url模式,并立即进行调度。请尝试以下操作:

url(r'^results/(\d+)/$', views.user_results, name='user_results'),  # will dispatch here and stop searching url patterns if a digit occurs after results
url(r'^results/', views.results, name='results')

相关问题 更多 >