Django 自定义404 500等错误页面的实现


Posted in Python onMarch 08, 2020

在开发网站的过程中,404,500错误,是不可避免产生的。
一旦产生了这种错误,很多可以通过web server 来处理。比如使用 apache 的定义
或者nginx 的定义。都可以定向处理。如果单纯在django里面可以处理吗?肯定是可以的,django提供了相应的处理方式,只要在django里

起步

面定义了,无论你今后部署在apache下或者是nginx下,都是生效的。

要想自定义错误页面,需要关闭调试模式 DEBUG = False ,因为调试模式的错误页面是开发下会显示错误信息的。

有两种方法可以实现自定义的错误页面。

方法一:创建特定命名的模板文件

这是一种非常简单的方式。在项目模板文件夹 templates 中创建命名为 404.html 的模板文件即可。

这个方式是其实是借用了 Django 的模板查找规则进行的。源码在 django.views.defaults.py 中:

ERROR_404_TEMPLATE_NAME = '404.html'

def page_not_found(request, exception, template_name=ERROR_404_TEMPLATE_NAME):
 ...

总的来说,方法一不需要设路由,只要新建规定名称的模板就能生效了。

方法二:设置句柄

如果需要更个性化的错误页面,不需要拘泥于特定的模板文件名,可以重新设置句柄,具体是在 urls.py 中设置:

# urls.py
def page_not_found(request, exception):
 return render(request, 'your_404_filename.html')

handler404 = page_not_found

urlpatterns = [
 ...
]

除了能捕获不存在路由地址,还能捕获视图中 raise Http404('message') 抛出的异常。

哪些错误页面可以配置

具体能自定义错误页面的有 4 中状态码:

# django.views.defaults.py
ERROR_404_TEMPLATE_NAME = '404.html'
ERROR_403_TEMPLATE_NAME = '403.html'
ERROR_400_TEMPLATE_NAME = '400.html'
ERROR_500_TEMPLATE_NAME = '500.html'

# django.conf.urls.__init__.py
handler400 = defaults.bad_request
handler403 = defaults.permission_denied
handler404 = defaults.page_not_found
handler500 = defaults.server_error

到此这篇关于Django 自定义404 500等错误页面的实现的文章就介绍到这了,更多相关Django自定义404 500错误页面内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
linux系统使用python获取cpu信息脚本分享
Jan 15 Python
详细介绍Python函数中的默认参数
Mar 30 Python
在Docker上开始部署Python应用的教程
Apr 17 Python
Python通过命令开启http.server服务器的方法
Nov 04 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
Python编程中NotImplementedError的使用方法
Apr 21 Python
在Django中输出matplotlib生成的图片方法
May 24 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
Jan 30 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 Python
Python后台开发Django会话控制的实现
Apr 15 Python
pytorch 彩色图像转灰度图像实例
Jan 13 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
Dec 01 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 #Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
Mar 07 #Python
Django接收照片储存文件的实例代码
Mar 07 #Python
Python实现对adb命令封装
Mar 06 #Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 #Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
Mar 06 #Python
mac在matplotlib中显示中文的操作方法
Mar 06 #Python
You might like
PHP动态柱状图实现方法
2015/03/30 PHP
分享PHP守护进程类
2015/12/30 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
详解适配器在JavaScript中的体现
2018/09/28 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
python 阶乘累加和的实例
2019/02/01 Python
python导入坐标点的具体操作
2019/05/10 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
python实现门限回归方式
2020/02/29 Python
关于Python解包知识点总结
2020/05/05 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
软件测试笔试题
2012/10/25 面试题
Java servlet面试题
2012/03/04 面试题
入党积极分子介绍信
2014/01/17 职场文书
公司业务员岗位职责
2014/03/18 职场文书
感恩寄语大全
2014/04/11 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
信访工作个人总结
2015/03/03 职场文书
小学生暑假生活总结
2015/07/13 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js
keepalived + nginx 实现高可用方案
2022/12/24 Servers