python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)


Posted in Python onMarch 09, 2020

有没有一种方法可以为Django项目中的每个应用程序创建多个自定义错误模板,我的意思是,在我的项目中,我有3个应用程序,每个应用程序将显示3种不同的custom 404错误.

现在,我在后台应用程序和前台显示相同的404错误页面.

最佳答案

创建一个自定义error view并将其分配给根urls.py中的handler404变量:

from django.views.defaults import page_not_found
 
def my_error_404(request, exception):
 template_name = '404.html'
 if request.path.startswith('/backoffice/'):
  template_name='backoffice/404.html'
 elif request.path.startswith('/frontoffice/'):
  template_name='frontoffice/404.html'
 return page_not_found(request, exception, template_name=template_name)

此代码适用于Django 1.9.如果使用django< = 1.9,则从视图中删除exception参数.

知识点补充:

Django 自定义 404 500 等错误页面

起步
要想自定义错误页面,需要关闭调试模式 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

总结

到此这篇关于python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)的文章就介绍到这了,更多相关python django自定义404页面内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python生成验证码实例
Aug 21 Python
Python队列的定义与使用方法示例
Jun 24 Python
python 实现一个贴吧图片爬虫的示例
Oct 12 Python
python中set()函数简介及实例解析
Jan 09 Python
python测试mysql写入性能完整实例
Jan 18 Python
python实现聚类算法原理
Feb 12 Python
Python中new方法的详解
Jan 15 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
Python 项目转化为so文件实例
Dec 23 Python
Python递归函数特点及原理解析
Mar 04 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
python相对企业语言优势在哪
Jun 12 Python
Python模块相关知识点小结
Mar 09 #Python
Django操作session 的方法
Mar 09 #Python
Python装饰器用法与知识点小结
Mar 09 #Python
Django中的session用法详解
Mar 09 #Python
python实现引用其他路径包里面的模块
Mar 09 #Python
python+opencv边缘提取与各函数参数解析
Mar 09 #Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 #Python
You might like
一个php导出oracle库的php代码
2009/04/20 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
很可爱的输入框
2008/08/03 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
jQuery 选择器详解
2015/01/19 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
安装vue-cli的简易过程
2018/05/22 Javascript
vue中设置、获取、删除cookie的方法
2018/09/21 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
Python读取网页内容的方法
2015/07/30 Python
python3.4爬虫demo
2019/01/22 Python
python批量爬取下载抖音视频
2019/06/17 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
中专生自荐信
2013/10/12 职场文书
就业协议书样本
2014/08/20 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
银行奉献演讲稿
2014/09/16 职场文书
项目合作意向书
2015/05/08 职场文书
同事欢送会致辞
2015/07/31 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server