Django自定义404页面无效

所以,在我的项目中,我想添加一个自定义的404错误页面,所以我按照我在网上找到的内容,但似乎没有什么对我有用 .

这就是我的文件:

settings.py

import os
# Django settings for HogwartsMail project.

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))

DEBUG = False
TEMPLATE_DEBUG = DEBUG

# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = ["*"]

urls.py

urlpatterns = patterns('',
    ...
)

handler404 = "HogwartsMail.views.error404"

views.py

def error404(request):
    return render(request,'404.html')

每当我尝试输入一个随机网址时,我得到的服务器错误(500)并没有得到404错误 .

正如我所说,我尝试了许多不同的方式,但没有一个真正适合我 .

另外,我遇到的另一个问题是我加载的页面非常慢,并且它们没有打开样式或图像,所以我认为,当 DEBUG = False 时,我需要一切都已经在线 . 那是对的吗?

回答(5)

2 years ago

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

project/urls.py

handler404 = 'accounts.views.page_not_found'

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

accounts/views.py

def page_not_found(request):

"""
Page not found Error 404
"""

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

不要忘记进行必要的进口 . 另外,在测试分段时,不要忘记在settings.py中更改Debug = False .

2 years ago

DEBUG = False 时,您可以使用 python manage.py runserver --insecure 在本地开发期间提供静态文件 .

请参阅this answer中的更多信息 .

2 years ago

def error404(request):
    return HttpResponseNotFound(render_to_string('404.html'))

另一个例子:

def error404(request):
    return render(request,'404.html', status=404)

2 years ago

好吧,事实证明我没有't seem to need to do anything but create a 404.html page. By creating in, when an 1304899 error is raised, Django will first look for a 404.html in your templates, before using it'自己的错误页面 . 我仍然有一个问题,我的静态文件不在网络上 - 当设置 DEBUG = False 既没有css文件也没有出现我的任何图像 . 除此之外,我的问题是固定的 .

2 years ago

作为a best practice我在我的项目中添加了2 urls.py . 所以我在我的基地 urls.py 中添加 handler404 . 我的父母 urls.py 看起来像这样

from django.conf.urls import handler404
import myapp

urlpatterns = [
   path('', include('myapp.urls')),
   path('admin/', admin.site.urls),
]

handler404 = myapp.views.error_404

error_404 是我的 views.py 中的一个视图 . 像这样

def error_404(request, exception):
    data = {"name": "somthing error"}
    return render(request,'myapp/404.html', data)

查看完整的教程here