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创建XML文档
Mar 01 Python
Python编码爬坑指南(必看)
Jun 10 Python
Python中optparser库用法实例详解
Jan 26 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
python实现图片识别汽车功能
Nov 30 Python
解决Python plt.savefig 保存图片时一片空白的问题
Jan 10 Python
Python定义函数功能与用法实例详解
Apr 08 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
Python 多线程,threading模块,创建子线程的两种方式示例
Sep 29 Python
如何通过python计算圆周率PI
Nov 11 Python
Django权限控制的使用
Jan 07 Python
python基础之模块的导入
Oct 24 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
Python中有趣在__call__函数
2015/06/21 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
python实现udp传输图片功能
2020/03/20 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
路政管理专业个人自荐信范文
2013/11/30 职场文书
市场专员岗位职责
2014/02/14 职场文书
《诺贝尔》教学反思
2014/02/17 职场文书
活动总结的格式
2014/05/07 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
整改通知书格式
2015/04/22 职场文书
高中历史教学反思
2016/02/19 职场文书
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android