没有尾随斜杠的Django URL无效

时间:2016-03-12 23:04:45

标签: python django python-2.7 url django-1.9

Updated Page not found (404)

这是一个愚蠢的问题。我刚刚创建了一个项目,并一直试图弄清楚这个问题。

from django.conf.urls import url
from django.views.generic import TemplateView

urlpatterns = [
    url(r'^$', TemplateView.as_view(template_name="index.html")),
    url(r'^about$', TemplateView.as_view(template_name="about.html")),
    url(r'^contact$', TemplateView.as_view(template_name="contact.html"), name="contact"),
    url(r'^test$', TemplateView.as_view(template_name="test_start"), name="test_start"),
    url(r'^test/sample$', TemplateView.as_view(template_name="test_start"), name="test_start"),
]

包含在

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('frontend.urls'))
]

当我转到localhost:8000/about时,我会被重定向到localhost:8000/about/,在那里我得到404 Not Found。

更新:我在网址中添加了更多网址。

更新2:我的意思是不包括尾部斜杠。道歉。

更新3:我在Firefox中打开了相同的URL,URL就像我想要的那样。这可能是重定向和浏览器缓存的问题吗?

4 个答案:

答案 0 :(得分:1)

您是否启用了append_slash设置? https://docs.djangoproject.com/en/dev/ref/settings/#append-slash

使用它可能有助于使其更加明确,并建议在整个django教程中

url(r'^about/$', TemplateView.as_view(template_name="about.html")),

编辑:

取消激活APPEND_SLASH设置(False)并使用

url(r'^about$', TemplateView.as_view(template_name="about.html")),

答案 1 :(得分:0)

将“约”的网址格式更改为:

url(r'^about/?$', TemplateView.as_view(template_name="about.html")),

如果没有/?,正则表达式^about$会匹配一个包含“about”字样的字符串。

答案 2 :(得分:0)

您可以从正则表达式中删除$,这表示行尾

url(r'^about', TemplateView.as_view(template_name="about.html")),

你也可以在你的正则表达式中包含一个斜杠,因为Django有APPEND_SLASH设置会发出重定向

url(r'^about/$', TemplateView.as_view(template_name="about.html")),
  

如果请求URL与URLconf中的任何模式都不匹配且不以斜杠结尾,则会向相同的URL发出HTTP重定向并附加斜杠。

答案 3 :(得分:0)

首先,我发现 Chrome 会自动在 URL 末尾添加尾部斜杠

Trailing URL Slashes in Django

因此,如果您的 URL 没有结尾斜杠,则 404 重定向会显示您是否使用 Chrome,但如果您使用的是 Firefox,则不会显示。

然后从这里knbk的评论来看,

How Django adds trailing slash

我确保在 setting.py 中有 CommonMiddleware 类并添加了“APPEND_SLASH = False

然后,清除Chrome的缓存,问题解决了!