【发布时间】:2015-06-25 15:51:02
【问题描述】:
Django 有built-in default views,当出现PermissionDenied、Http404、SuspiciousOperation 等异常时会自动使用它们。这是我喜欢的 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 的登录以及其他行为。仅仅为了将异常信息注入错误模板而重新实现所有这些似乎有点愚蠢。
【问题讨论】:
-
@karthikr 不幸的是,我已经遇到过这个问题,似乎这就是
settings.handler*所指的内容。问题是异常实例是not being passed into the view as an argument。我的问题是是否有办法通过自省来检索该异常实例?
标签: python django error-handling django-middleware django-errors