我在尝试处理与主页无关的视图时遇到404错误。例如,如果我最初从主页 home 开始,并且想要导航到另一个名为 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.
答案 0 :(得分:1)
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(r'^$', 'prd.views.home', name='home'),
url(r'^otherpage.html$', 'prd.views.otherpage', name='otherpage'),
具有相同的模式(正则表达式),因此将始终匹配。您希望为这两者设置不同的URL,以便区分它们。也许你可以这样做:
url(r'^otherpage.html$', 'prd.views.otherpage', name='otherpage'),
进行此更改后,您现在可以与其他页面匹配,并且希望不再有404。
编辑:
www.example.com/otherpage.html
匹配www.example.com/otherpage
,但不匹配www.example.com/otherpage
要匹配url(r'^otherpage$', 'prd.views.otherpage', name='otherpage'),
,您需要使用:
.html
注意正则表达式的区别,这里没有{{1}}。正则表达式与您放入的正确匹配。