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 相关文章推荐
python调用新浪微博API项目实践
Jul 28 Python
python数据结构之图深度优先和广度优先实例详解
Jul 08 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
12步入门Python中的decorator装饰器使用方法
Jun 20 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
深入理解Python中的*重复运算符
Oct 28 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
Django实现文件上传下载
Oct 06 Python
python 遍历pd.Series的index和value
Nov 26 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
Jun 30 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对二维数组按指定键值key排序示例代码
2013/11/26 PHP
php单例模式示例分享
2015/02/12 PHP
PHP6新特性分析
2016/03/03 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
JS闭包原理与应用经典示例
2018/12/20 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
在Uni中使用Vue的EventBus总线机制操作
2020/07/31 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
Python学习小技巧总结
2018/06/10 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
python openCV自制绘画板
2020/10/27 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
长青弘远的面试题
2012/06/09 面试题
安全资料员岗位职责范本
2014/06/28 职场文书
工资收入证明
2014/10/07 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript