这是一个愚蠢的问题。我刚刚创建了一个项目,并一直试图弄清楚这个问题。
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就像我想要的那样。这可能是重定向和浏览器缓存的问题吗?
答案 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的缓存,问题解决了!