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写的PHPMyAdmin暴力破解工具代码
Aug 06 Python
python根据路径导入模块的方法
Sep 30 Python
简单实现python收发邮件功能
Jan 05 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
transform python环境快速配置方法
Sep 27 Python
用Python实现读写锁的示例代码
Nov 05 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
利用python实现周期财务统计可视化
Aug 25 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
Mar 02 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
Python中socket网络通信是干嘛的
May 27 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 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生成二维码图片方法汇总
2016/12/17 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
jquery ui对话框实例代码
2013/05/10 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
python实现博客文章爬虫示例
2014/02/26 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
python 正确保留多位小数的实例
2018/07/16 Python
python 字典中取值的两种方法小结
2018/08/02 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
python程序文件扩展名知识点详解
2020/02/27 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
高二政治教学反思
2014/02/01 职场文书
大学军训感言400字
2014/03/11 职场文书
结对共建工作方案
2014/06/02 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
爱情保证书
2015/01/17 职场文书
护理工作个人总结
2015/03/03 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书