尝试处理与主页无关的视图时出现404错误。例如,如果我最初从主页主页开始,并且想要导航到另一个页面,称为otherpage,则会收到未找到的404 otherpage.html。
我的工作方式基于直觉。因此,如果有更好的方法可以做到这一点,请提及:
在文件中:
prd/
views.py
url.py
otherstuffthatshouldbehere.py..
我有views.py(这是我认为错误所在的位置):
from django.shortcuts import render
def home(request):
context = {}
template = "index.html"
return render(request, template, context)
def otherpage(request):
context = {}
template = "otherpage.html"
return render(request, template, context)
然后urls.py:
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
url(r'^$', 'prd.views.home', name='home'),
url(r'^$', 'prd.views.otherpage', name='otherpage'),
url(r'^admin/', include(admin.site.urls)),
)
这将为otherpage.html返回404。我的模板目录工作正常。但是,如何处理多个视图?
编辑:
添加后:
url(r'^otherpage$', 'prd.views.otherpage', name='otherpage'),
我收到此错误:
Using the URLconf defined in prd.urls, Django tried these URL patterns, in this order:
^$ [name='home']
^about$ [name='about']
^projects$ [name='projects']
^admin/
The current URL, about.html, didn't match any of these.
最佳答案
urlpatterns
从顶部开始,然后向下直到与基于正则表达式的URL匹配为止。为了让Django服务于位于otherpage.html的页面,必须在urlpatterns中定义一个与otherpage.html匹配的URL,否则您将获得404。
在这种情况下,您可以:
url(r'^$', 'prd.views.home', name='home'),
url(r'^$', 'prd.views.otherpage', name='otherpage'),
请注意,这里的任何内容都不会到达
otherpage
,因为home
具有相同的模式(正则表达式),因此始终优先匹配。您想为这两个URL设置不同的URL,以便可以区分它们。也许您可以执行以下操作:url(r'^$', 'prd.views.home', name='home'),
url(r'^otherpage.html$', 'prd.views.otherpage', name='otherpage'),
进行此更改后,您现在可以与其他页面匹配,并且希望不再有404。
编辑:
url(r'^otherpage.html$', 'prd.views.otherpage', name='otherpage'),
此匹配
www.example.com/otherpage.html
,但不匹配www.example.com/otherpage
要匹配
www.example.com/otherpage
,您需要使用:url(r'^otherpage$', 'prd.views.otherpage', name='otherpage'),
注意正则表达式的区别,这里没有
.html
。正则表达式与您输入的内容完全匹配。