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 时间处理datetime实例
Sep 06 Python
Python脚本实现12306火车票查询系统
Sep 30 Python
Python实现识别手写数字大纲
Jan 29 Python
详解Python中的四种队列
May 21 Python
python用post访问restful服务接口的方法
Dec 07 Python
python画图的函数用法以及技巧
Jun 28 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
python障碍式期权定价公式
Jul 19 Python
mac使用python识别图形验证码功能
Jan 10 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
python用TensorFlow做图像识别的实现
Apr 21 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
Aug 31 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
javascript replace方法与正则表达式
2008/02/19 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
jquery ajax例子返回值详解
2012/09/11 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
jQuery实现的多滑动门,多选项卡效果代码
2016/03/28 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
Python多线程实现同步的四种方式
2017/05/02 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
Python闭包思想与用法浅析
2018/12/27 Python
Python笔记之工厂模式
2019/11/20 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
办公室前台岗位职责
2014/01/04 职场文书
三万活动总结
2014/04/28 职场文书
3的组成教学反思
2014/04/30 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书