所以,在我的项目中,我想添加一个自定义的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
时,我需要一切都已经在线。这是对的吗?
答案 0 :(得分:4)
在项目文件夹的urls.py中添加此帐户(可以是任何应用程序)是同一项目的应用程序:
<强>项目/ urls.py 强>
handler404 = 'accounts.views.page_not_found'
在帐户视图中添加以下内容:
帐户/ 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。
答案 1 :(得分:3)
DEBUG = False
时,您可以使用python manage.py runserver --insecure
在本地开发期间提供静态文件。
在this answer中查看更多信息。
答案 2 :(得分:0)
def error404(request):
return HttpResponseNotFound(render_to_string('404.html'))
作为另一个例子:
def error404(request):
return render(request,'404.html', status=404)
答案 3 :(得分:0)
好的,事实证明我似乎不需要做任何事情,只需创建一个404.html页面。通过创建in,当出现“找不到页面”错误时,Django将首先在模板中查找404.html,然后再使用它自己的错误页面。我的静态文件不在网络上时仍有问题 - 当设置DEBUG = False
时,css文件和我的任何图像都不会出现。除此之外,我的问题已经解决了。
答案 4 :(得分:0)
正如a best practice我在项目中添加了2 urls.py
。所以我在我的基地handler404
中添加了urls.py
。我的父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