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使用7z解压apk包的方法
Apr 18 Python
Python实现栈的方法
May 26 Python
python字符串的常用操作方法小结
May 21 Python
python smtplib模块自动收发邮件功能(一)
May 22 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
基于python图像处理API的使用示例
Apr 03 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
python基础详解之if循环语句
Apr 24 Python
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 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+memcache实现消息队列案例分享
2014/05/21 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
ScrollDown的基本操作示例
2013/06/09 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
js图片处理示例代码
2014/05/12 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
JavaScript原型式继承实现方法
2019/11/06 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
Python实现完整的事务操作示例
2017/06/20 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
python调用接口的4种方式代码实例
2019/11/19 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
新闻专业推荐信范文
2013/11/20 职场文书
企业文化标语口号
2014/06/09 职场文书
霸气队列口号
2014/06/18 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
学校团代会开幕词
2016/03/04 职场文书