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 相关文章推荐
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
Python常见内置高效率函数用法示例
Jul 31 Python
python算法题 链表反转详解
Jul 02 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
Aug 19 Python
python 计算两个列表的相关系数的实现
Aug 29 Python
Python进度条的制作代码实例
Aug 31 Python
python 实现多维数组转向量
Nov 30 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
pycharm下pyqt4安装及环境配置的教程
Apr 24 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 22 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
怎么使 Mysql 数据同步
2006/10/09 PHP
分享一下贝贝成长进度的php代码
2012/09/14 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
iView框架问题整理小结
2018/10/16 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
python生成二维码的实例详解
2017/10/29 Python
python如何重载模块实例解析
2018/01/25 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
python django生成迁移文件的实例
2019/08/31 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
python中pyqtgraph知识点总结
2021/01/26 Python
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
德语专业求职信
2014/03/12 职场文书
2014年评职称工作总结
2014/11/20 职场文书
现役军人家属慰问信
2015/03/24 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
python实现局部图像放大
2021/11/17 Python
bat批处理之字符串操作的实现
2022/03/16 Python
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android