python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)

作者:像风一样爱自由 时间:2022-07-26 19:08:11 

有没有一种方法可以为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

来源:https://blog.csdn.net/sinat_41292836/article/details/102957747

标签:django,404,500,错误页
0
投稿

猜你喜欢

  • ASP中实现分页显示的七种方法

    2007-09-20 13:19:00
  • CSS的未来:一些试验性CSS属性

    2011-06-10 13:20:00
  • css样式表滤镜全接触

    2007-10-26 12:48:00
  • Python 分享10个PyCharm技巧

    2021-11-18 11:03:41
  • JS语法检查插件 jsLint for Vim

    2010-11-15 21:31:00
  • python3写爬取B站视频弹幕功能

    2023-10-31 10:00:50
  • PHP中常用的数组操作方法笔记整理

    2023-06-06 15:17:12
  • Python深度学习之使用Albumentations对图像做增强

    2023-11-24 06:18:23
  • 使用python的chardet库获得文件编码并修改编码

    2022-02-23 18:22:35
  • pytorch中dataloader 的sampler 参数详解

    2023-09-16 21:00:13
  • Python模块结构与布局操作方法实例分析

    2021-11-26 10:49:31
  • Python字符串和其常用函数合集

    2023-07-12 15:29:22
  • 基于python的itchat库实现微信聊天机器人(推荐)

    2021-11-30 13:54:21
  • Python timeit模块原理及使用方法

    2023-09-22 08:19:18
  • go swagger生成接口文档使用教程

    2023-10-20 12:31:35
  • ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解

    2023-11-22 08:18:27
  • 讲述SQL Server数据转换服务小妙招

    2010-07-26 14:43:00
  • python+numpy+matplotalib实现梯度下降法

    2023-07-26 04:07:35
  • python实现按任意键继续执行程序

    2021-02-12 12:47:10
  • 发现一个不错的11px字体:PMingLiu

    2008-09-06 12:49:00
  • asp之家 网络编程 m.aspxhome.com