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
投稿

猜你喜欢

  • PHP实现统计代码行数小工具

    2023-11-15 18:53:20
  • SQL SERVER数据操作类代码

    2024-01-24 02:20:47
  • 浏览器根据什么来判定脚本失控?[译]

    2009-02-20 13:36:00
  • 8段用于数据清洗Python代码(小结)

    2023-10-01 06:04:25
  • SQLServer 2005中如何列所有存储过程

    2008-11-24 17:39:00
  • Python深度学习之FastText实现文本分类详解

    2022-09-03 10:35:28
  • SQLserver 实现分组统计查询(按月、小时分组)

    2024-01-24 12:52:15
  • 解决Jupyter无法导入已安装的 module问题

    2022-05-13 07:14:18
  • 网络基础-数据包

    2022-11-24 21:48:10
  • mssql server 数据库附加不上解决办法分享

    2011-09-30 11:55:20
  • 远程登录MySQL服务(小白入门篇)

    2024-01-19 09:02:56
  • aspjpeg组件asp代码实例使用详解

    2008-12-14 10:33:00
  • Python 列表(List)操作方法详解

    2023-06-15 10:10:04
  • Golang 性能基准测试(benchmark)详解

    2024-02-08 03:10:11
  • 验证javascript中Object和Function的关系的三段简单代码

    2024-04-29 13:43:32
  • ASP脚本变量、函数、过程和条件语句

    2008-10-14 14:43:00
  • Python下利用BeautifulSoup解析HTML的实现

    2021-11-20 03:33:54
  • Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)

    2021-06-11 17:17:54
  • PHP session反序列化漏洞超详细讲解

    2023-05-25 08:54:18
  • django 2.0更新的10条注意事项总结

    2023-05-22 10:48:35
  • asp之家 网络编程 m.aspxhome.com