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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
跟老齐学Python之Python文档
Oct 10 Python
Python中使用PDB库调试程序
Apr 05 Python
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
Python中Iterator迭代器的使用杂谈
Jun 20 Python
Python语言描述最大连续子序列和
Dec 05 Python
用Python进行简单图像识别(验证码)
Jan 19 Python
用python处理图片实现图像中的像素访问
May 04 Python
python实现定时发送qq消息
Jan 18 Python
python 实现保存最新的三份文件,其余的都删掉
Dec 22 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
Python 生成VOC格式的标签实例
Mar 10 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
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
js文字横向滚动特效
2015/11/11 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
小程序两种滚动公告栏的实现方法
2019/09/17 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
python字符串连接的N种方式总结
2014/09/17 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
python K近邻算法的kd树实现
2018/09/06 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
自我评价是什么
2014/01/04 职场文书
公司活动策划方案
2014/01/13 职场文书
广告业务员岗位职责
2014/02/06 职场文书
大学四年个人自我小结
2014/03/05 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
2014年学前班工作总结
2014/12/08 职场文书
先进个人推荐材料
2014/12/29 职场文书
合同审查法律意见书
2015/06/04 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python