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怎么学好python?
Oct 07 Python
python选择排序算法的实现代码
Nov 21 Python
Python 元组(Tuple)操作详解
Mar 11 Python
Python实现文件复制删除
Apr 19 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
详解pytorch 0.4.0迁移指南
Jun 16 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
python打开使用的方法
Sep 30 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
python解析json数据
Apr 29 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简单统计字符串单词数量的方法
2015/06/19 PHP
Jquery Ajax请求代码(2)
2011/01/07 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
js实现盒子移动动画效果
2020/08/09 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
python多线程扫描端口(线程池)
2019/09/04 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
Python3内置函数chr和ord实现进制转换
2020/06/05 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
python 实现批量图片识别并翻译
2020/11/02 Python
Python对excel的基本操作方法
2021/02/18 Python
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
Internal修饰符有什么含义
2013/07/10 面试题
北大青鸟学生求职信
2013/09/24 职场文书
工地资料员岗位职责
2013/12/31 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
校园活动宣传方案
2014/03/28 职场文书
家长学校工作方案
2014/05/07 职场文书
汽车维修求职信
2014/06/15 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书