【问题标题】:Django URL directing to wrong viewDjango URL重定向到错误的视图
【发布时间】:2021-06-16 05:11:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • 网址非常相似。如果你把它改成path('survey/results/view/&lt;url_id&gt;/', views.view_results, name='view-results'),就可以了。
  • 因为results&lt;url_id&gt; 的一个很好的候选者,它在给定的模式中没有规范,所以任何文本都足够了。
  • 是的,这就是我的想法。有没有办法让我指定 必须有 15 个字符?

标签: django django-views django-urls


【解决方案1】:

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

按顺序解析 url 模式并返回 take-survey,因为 url /survey/results/lqH16jwM19Y6LLd/ 适合 survey/&lt;url_id&gt;/&lt;token&gt;/ 以及 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'),

【讨论】:

    【解决方案2】:

    网址非常相似。

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

    如果您将view-results 更改为:

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

    会成功的。

    还可以查看来自 Django 的 examples

    【讨论】:

      猜你喜欢
      • 2012-11-25
      • 2020-08-23
      • 2020-07-07
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 2021-10-13
      相关资源
      最近更新 更多