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获取本地计算机名字的方法
Apr 29 Python
Python yield 使用浅析
May 28 Python
python读取二进制mnist实例详解
May 31 Python
python多维数组切片方法
Apr 13 Python
Python提取支付宝和微信支付二维码的示例代码
Feb 15 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
python config文件的读写操作示例
Sep 27 Python
Python编程快速上手——正则表达式查找功能案例分析
Feb 28 Python
django 解决扩展自带User表遇到的问题
May 14 Python
Flask处理Web表单的实现方法
Jan 31 Python
python爬虫scrapy基本使用超详细教程
Feb 20 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 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常用函数小技巧
2008/09/11 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
jQuery 自定义函数写法分享
2012/03/30 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
办理房产过户的委托书
2014/09/14 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
党的作风建设心得体会
2014/10/22 职场文书
公务员年度考核评语
2014/12/31 职场文书
微信搭讪开场白
2015/05/28 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏