Django 404页面未加载

我已经使用django 1.10创建了一个简单的django应用程序来创建我的自定义404页面 . 我在我的页面中创建了404.html和500.html,根据Django Documentation.Then我尝试了两种方法来呈现404错误消息 .

1)我制作了简单的404.html和500.html页面,然后没有做任何事情 . 我成功获得了500页 . 正确的URL页面是:localhost:8000 / book我提供localhost:8000 / book / fgfg根据输入没有条目 . 但是它将我发送到500页但不是我预期的404页面 . 这是Internal App的Urls.py:

from django.conf.urls import url
from django.conf.urls import (
handler400, handler403, handler404, handler500
 )
from bookform import views
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),]

这是外部项目的urls.py:

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


 urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^book/', include('bookform.urls')),
]
# handler404='bookform.views.handler404'
# handler500='bookform.views.handler500'

我在这里评论了handler404和500,我在第二种方法中取消注释 . 在第一种方法中,除了添加404和500个html文件之外我什么也没做,Django试图找出url并导致500错误,但我原以为它是404错误 . 将Debug设置为true时显示此错误:使用formdj.urls中定义的URLconf,Django按以下顺序尝试了这些URL模式:^ admin / ^ book / ^ $ [name ='index']当前URL,book / dfsdfsd,与这些中的任何一个都不匹配 .

如果我设置DEBUG = FALSE导致500错误 .

2)现在在方法2中:我更新了views.py文件,并从urls.py取消注释了handler404和handler505行 .

这是views.py:

from django.shortcuts import render,render_to_response
  from django.shortcuts import HttpResponse
  from django.forms import modelformset_factory
  from forms import BookForm
  from bookform.models import Book
  from django.template import RequestContext
  def index(request):

     BookFormSet=modelformset_factory(Book,fields= ('name','authors'),extra=10,can_delete=True)
    formset=BookFormSet()
    return render(request,'bookform/index.html',{'formset':formset})

  def handler404(request):
    response = render(request,'bookform/404.html', {'status':400},
                            )
    response.status_code = 404
    print('I am getting called')
    return response
 def handler500(request):
    response = render(request,'bookform/500.html', {'status':400},
                              )
    print('I am getting called 500')
    response.status_code = 500
    return response

我再次得到500页 . 我试图删除500和Debug = False然后它导致500.然后我打开调试,它说错误是404错误 . 所以无论我做了什么,我都有一个叫做500.html的页面 . 现在我很困惑如何正确加载404.html页面 .

回答(2)

2 years ago

在项目文件夹的urls.py中添加此帐户(它可以是任何应用程序)是同一项目的应用程序:

project/urls.py

handler404 ='accounts.views.page_not_found'

在帐户的视图中添加以下内容:

accounts/views.py

def page_not_found(request):

msgstr“”“找不到页面错误404”“”

response = render_to_response('404.html',context_instance=RequestContext(request))
     response.status_code = 404
     return response

不要忘记进行必要的导入,也最好在urls模式上面添加handler404内容 . 在测试分段时,也不要忘记在settings.py中更改Debug = False .

2 years ago

尝试这样的观点:

from django.views.generic.base import TemplateView

class Error404View(TemplateView):
    template_name = '404.html'

    def get(self, request, *args, **kwargs):
        response = super(Error404View, self).get(request, *args, **kwargs)
        response.status_code = 404
        return response

    @classmethod
    def as_error_view(cls):
        v = cls.as_view()
        def view(request):
            r = v(request)
            r.render()
            return r
        return view

比,在 urls.py

handler404 = Error404View.as_error_view()