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脚本
Feb 10 Python
python删除指定类型(或非指定)的文件实例详解
Jul 06 Python
python制作爬虫爬取京东商品评论教程
Dec 16 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
pip安装py_zipkin时提示的SSL问题对应
Dec 29 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
tensorflow estimator 使用hook实现finetune方式
Jan 21 Python
Python自动重新加载模块详解(autoreload module)
Apr 01 Python
浅谈Python中的生成器和迭代器
Jun 19 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 静态页面中显示动态内容
2009/08/14 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
python传递参数方式小结
2015/04/17 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
python高阶爬虫实战分析
2018/07/29 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
python感知机实现代码
2019/01/18 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
Django CBV模型源码运行流程详解
2020/08/17 Python
python遍历路径破解表单的示例
2020/11/21 Python
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
学习十八大报告感言
2014/02/04 职场文书
五年级音乐教学反思
2014/02/06 职场文书
群众路线自我剖析及整改措施
2014/11/04 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
党支部评议意见
2015/06/02 职场文书
小学科学课教学反思
2016/02/23 职场文书
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript