【问题标题】:Django: How to get exception instance in error handlersDjango:如何在错误处理程序中获取异常实例
【发布时间】:2015-06-25 15:51:02
【问题描述】:

Django 有built-in default views,当出现PermissionDeniedHttp404SuspiciousOperation 等异常时会自动使用它们。这是我喜欢的 Django 的一个方便的功能,但它似乎有一个限制。

我提出了一条异常消息:raise PermissionDenied('You are not an xyz and have no access to foobar')

是否存在包含原始错误处理程序调用的模板(即403.html)中可用的原始异常实例的上下文变量,以便我可以访问消息?

如果没有,是否可以使用自定义处理程序(settings.handler403 等)获取原始异常,以便将其注入上下文?


注意:我相信我可以使用process_exception 创建自定义中间件,但如果可能的话,我想避免这种情况,因为我的猜测是我会复制很多现有的 Django 逻辑并且重用它会更干净。此外,看起来自定义的process_exception 会覆盖django.core.handlers.base 的登录以及其他行为。仅仅为了将异常信息注入错误模板而重新实现所有这些似乎有点愚蠢。

【问题讨论】:

标签: python django error-handling django-middleware django-errors


【解决方案1】:

此功能已实现为ticket 24733

在 Django 1.9 及更高版本中,异常将被传递给error handlers

【讨论】:

  • 坦率地说,这个简单的用例直到现在还没有实现,但我很高兴它终于落地了 :)
猜你喜欢
  • 2011-05-11
  • 2013-08-15
  • 1970-01-01
  • 2015-03-29
  • 2011-08-17
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多