方法一、直接templates目录创建特定命名的模板文件
1、主配置文件settings.py中添加模板路径,关闭调试模式 DEBUG = False ,因为调试模式的错误页面是开发下会显示错误信息的,同时设置ALLOW_HOST。
设置后对于404或其他错误请求会显示默认的错误码页面,而不会再显示具体的代码错误了。但是默认的页面只有状态码。所以常常需要自己再写页面。
DEBUG = False
ALLOWED_HOSTS = [*]
2、在templates文件夹下创建404.html和500.html,如果使用这种直接放文件的方法,文件名是django已经规定好了的,不能是其他的名称。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ request_path }}
404
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
500
</body>
</html>
测试404和500请求
这是一种非常简单的方式。在项目模板文件夹 templates 中创建命名为 404.html 的模板文件即可。这个方式是其实是借用了 Django 的模板查找规则进行的。源码在 django.views.defaults.py 中,方法一不需要设路由,只要新建规定名称的模板就能生效了。
方法二、设置句柄
如果需要更个性化的错误页面,不需要拘泥于特定的模板文件名,可以重新设置句柄。
1、同样的需要先进行方法一的步骤修改setting.py配置及创建html文件
2、添加视图函数,可以添加在项目的views中,也可以另外创建一个python文件 或者直接写在urls中,在哪里不影响,只要能引用到就可以了。我这里是写在项目中了。
# 404
def page_not_found(request, exception):
return render(request, '404.html')
# 500
def page_error(request):
return render(request, '500.html')
2、在urls.py设置句柄
(1)可以用字符串直接引用函数,需要加上完整的地址项目文件和函数地址。
handler404="echarts.views.page_not_found"
handler500 = "echarts.views.page_error"
(2)也可以先引入再调用。
from echarts.views import *
handler404=page_not_found
handler500=page_error
3、同样可以访问
三、设置 DEBUG=False后静态文件404问题
- 原因
当我们在开发django应用时如果设置了 DEBUG = True,那么django便会自动帮我们对静态文件进行路由;但是当我们设置DEBUG = False后,这一功能便没有了,此时静态文件就会出现加载失败的情况,想要让静态文件正常显示,我们就需要配置静态文件服务了。
1、一种是使用文件服务器如nginx来实现:
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /root/myproject/static;
}
此时我们在应用中加载静态文件的话就只需要这么来写了,以img加载为例:
<img src="/static/images/good.png" alt="My image"/>
具体的介绍和配置在之前的博客里有nginx+uwsgi+django部署,对这种方法这里就不多说了。
2、第二种就是设置django的文件服务的django.views.static.serve()方法
(1)修改setting.py
STATIC_URL = '/static/'
# 存放静态文件的目录,其中也可以包含url
STATICFILES_DIRS= [
#os.path.join(BASE_DIR,'static'),
]
STATIC_ROOT = os.path.join(BASE_DIR, "static") # 使用 collectstatic后收集的静态文件的存放绝对路径
(2)修改整个项目的urls.py
from django.conf import settings ##新增
from django.views.static import serve ##新增
urlpatterns = [
re_path(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}, name='static') ##新增
]
(3)然后在终端执行命令把静态文件收集到 STATIC_ROOT中
python manage.py collectstatic
关于DEBUG模式和静态文件这里写的不是很详细,详细介绍在我另一篇博客里Django中DEBUG模式及static静态文件
参考:
Django 自定义 404 500 等错误页面
Django 配置404页面
Django 项目设置 Debug=False 后静态文件和上传文件404错误问题解决
详解django中的collectstatic命令以及STATIC_URL、STATIC_ROOT配置