【问题标题】:Django, path/urlsDjango,路径/网址
【发布时间】:2018-11-16 16:53:04
【问题描述】:

请解释一下为什么以下代码适用于http://127.0.0.1:8000/index/1/ 而不适用于http://127.0.0.1:8000/1/

我的网站\urls.py

urlpatterns = [
  path('index/', include('polls.urls')),
  path('1/', include ('polls.urls')),
]

投票\urls.py

urlpatterns = [
  path('1/', views.polls, name='z'),
  path('', views.index, name='index'),
]

Django 不接受缺少一些类似索引的路径,一切都建立在它之上吗?

【问题讨论】:

  • “代码不适用于...”是什么意思?你有任何错误吗?
  • 它仅在地址中的“index/”之后显示“1/”的视图,例如 127.0.0.1:8000/index/1,并且它不能仅识别 127.0。 0.1:8000/1/,我得到 404
  • 黄色调试页面的完整错误信息会告诉你Django尝试了哪些路径,这将有助于解释发生了什么。确保您已保存所有文件并重新启动服务器,以便您运行您认为的代码。
  • 我再次检查过,所以:对于 127.0.0.1:8000/index 带来索引视图(正确),对于 127.0.0.1:8000/1 也索引视图(不正确),对于 127.0 .0.1:8000/index/1 它为/1(正确)呈现视图。为什么它仅在 /index/1 的情况下识别(显示右视图)/1? '/1' 模式的路径在 ' ' 模式(用于索引)之前,因此应该首先捕获它。

标签: python django


【解决方案1】:

尝试在 mysite 中使用您的 urlpatterns 以仅使用一个路径,然后像这样在 polls/url.py 中映射路径

mysite/urls.py

urlpatterns = [
    path('polls/', include('polls.urls')),
]

和 polls/urls.py

urlpatterns = [
    path('1/', views.polls, name='z'),
    path('', views.index, name='index'),
]

如果您使用基于类的视图 (CBV),请确保在您的 urlpatterns 中使用 .as_view() :) 希望这会有所帮助!

【讨论】:

  • 应该是 polls/1 并且 poll/ 会给你索引
【解决方案2】:

根据您的代码,您的所有路径都将是, http://127.0.0.1:8000/index/1/http://127.0.0.1:8000/index/http://127.0.0.1:8000/1/1/http://127.0.0.1:8000/1/

在你的views.py中与投票相关的两个url是http://127.0.0.1:8000/index/1/http://127.0.0.1:8000/1/1/

正如您在标题中提到的,http://127.0.0.1:8000/index/1/ 有效,http://127.0.0.1:8000/1/ 无效,因为您请求的网址错误。您请求的网址不适用于views.polls 将其更改为http://127.0.0.1:8000/1/1/。你会得到你想要的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2023-04-05
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多