Django:如何在错误处理程序中获取异常实例

Django: How to get exception instance in error handlers

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 中的登录以及其他行为。仅仅为了将异常信息注入错误模板而重新实现所有这些似乎有点愚蠢。

此功能已实现为 ticket 24733

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