Django URL 指向错误的视图

Django URL directing to wrong view

我正在创建一个 Django 应用程序并有几个 URL'S

path('survey/<url_id>/<token>/', views.take_questionnaire, name='take-survey'),
path('survey/results/<url_id>/', views.view_results, name='view-results'),

我正在尝试访问 'view-results' url - http://127.0.0.1:8000/survey/results/lqH16jwM19Y6LLd/ - 但出于某种原因,这会触发 'take-survey' url。如果我更改 url 的顺序,它们似乎可以工作,但我很好奇是什么原因造成的。

我以前从未遇到过这种情况,也许我在学习 django urls 时遗漏了什么。有人可以解释为什么第一个 URL 被触发而不是第二个吗?

网址非常相似。

所有两个 url 都匹配第二和第三位的字符串。

如果您将 view-results 更改为:

path('survey/results/<b>view</b>/<url_id>/', views.view_results, name='view-results'),

会成功的。

另请参阅 Django 的 examples

view-results 路线移到 take-survey 路线上方。

url 模式按顺序解析并返回 take-survey 因为 url /survey/results/lqH16jwM19Y6LLd/ 适合 survey/<url_id>/<token>/ 以及 view-results 模式。

更改顺序可确保任何 url /survey/results/some-id/ 将始终转到 view-results

path('survey/results/<url_id>/', views.view_results, name='view-results'),
path('survey/<url_id>/<token>/', views.take_questionnaire, name='take-survey'),