【问题标题】:Django urlpatterns/include() loading wrong viewDjango urlpatterns/include() 加载错误的视图
【发布时间】:2016-06-11 17:44:53
【问题描述】:

除了几个数据驱动的应用程序之外,网站还有一个主页。没问题。但是当我尝试添加其他非数据驱动的页面(关于、使命宣言等)时,我遇到了通过 url 指示的问题。

settings.py url 模式包括:

url(r'^$', include('home.urls')),
url(r'^mission/$', include('home.urls')),

home/urls.py 包括:

url(r'^$', views.index, name='index'),
url(r'^mission/$', views.mission, name='mission'),

将浏览器指向主页会按原样加载索引视图,但将浏览器指向/mission/也会加载索引视图。

我意识到我可能在这里遗漏了一些小(和基本)的东西,但我已经阅读了第一百次文档并阅读了很多其他人关于 urlpatterns 的问题,但我就是想不通这是怎么回事。 settings.py 中的 include() 语句似乎不是问题。由于主页索引视图加载它显然被定向到 home/urls.py,并且该文件非常简单,以至于我看不出有什么问题。

有人可以教育我,以便我可以继续我的下一个 Django 砖头吗?我很感激。


已解决 - 谢谢 Sohan Jain

实际问题是在设置 URLPATTERNS 中使用 r'^$' 而不是 r''。使用第二个 include() 语句试图解决实际问题。

【问题讨论】:

  • 你有两个同名的 url,这不是应该的。名称应该是唯一的,或者如果您有相同的名称,则需要将它们放在不同的名称空间中。你也不能include(...) 使用以$结尾的模式
  • 我不明白你为什么在这里使用了两次 include。
  • @Daniel,没有它我得到了 404。

标签: python django python-3.x django-urls


【解决方案1】:

当你include来自另一个目录的url时,它们的路径必须以第一个参数开头。

所以当你说url(r'^$', include('home.urls'))时,这意味着:对于home.urls中的每个url,使其路径以^$开头,即什么都没有。

当你说url(r'^mission/$', include('home.urls')) 时,这意味着:对于 home.urls 中的每个 url,使其路径以“任务”开头。

并且url是按顺序匹配的。所以导航到/mission/ 匹配url(r'^mission/$', include('home.urls')) 然后url(r'^$', views.index, name='index'),这会产生索引页面。

这就是你想要的:

settings.py 
url(r'', include('home.urls'))

home/urls.py
url(r'^$', views.index, name='index'),
url(r'^mission/$', views.mission, name='mission'),

【讨论】:

  • @Jefe 转至/mission/
  • 最后一条评论不正确。错字。当我最初有它与此类似时,我将 r'^$' 作为我的 settings.py urlpatterns 的表达式。感谢您的帮助,现在这很有意义。
  • @Jefe 你还有问题吗?
  • @vishes_shell 现在知道了。谢谢。
猜你喜欢
  • 2023-03-27
  • 2021-09-29
  • 2015-11-13
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 2021-07-27
相关资源
最近更新 更多