尝试处理与主页无关的视图时出现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。正则表达式与您输入的内容完全匹配。

10-07 15:06