python - Django:url 调度程序

标签 python django

我正在尝试配置我的 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 只匹配第二个网址?

最佳答案

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

>>> 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 模式并立即调度。试试这个:

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')

关于python - Django:url 调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22338339/

相关文章:

python - 如何在Python Azure函数中解析 "Could not load type ' Microsoft.Azure.WebJobs.ParameterBindingData'"?

python - pandas 中 int64 到 float64 的非自愿转换

python - Pandas 合并分层数据框并维护层次结构

javascript - 从电话应用程序登录

python - 如何在 Flask 中使用 AJAX 遍历列表

python - 如何将多个 pandas 数据帧写入单个输出 excel 文件?

python - 如何为django应用程序设置图片上传根目录

python - 在 mongoengine 中使用 get_object_or_404() 方法

Django:if 表达式末尾未使用 'v_item.pk'

python - Django 测试在没有互联网连接的情况下运行得更快