【发布时间】:2011-02-15 20:26:53
【问题描述】:
我有一个做一些处理的中间件。在某些情况下,它会引发异常,并且用户会看到我的 500.html 模板 - 正确响应 500 http 状态。
现在,在某些例外情况下,我想呈现与默认 500.html 不同的模板。是否有可能/如何实现?
【问题讨论】:
标签: django django-templates render middleware
我有一个做一些处理的中间件。在某些情况下,它会引发异常,并且用户会看到我的 500.html 模板 - 正确响应 500 http 状态。
现在,在某些例外情况下,我想呈现与默认 500.html 不同的模板。是否有可能/如何实现?
【问题讨论】:
标签: django django-templates render middleware
您可以捕获这些异常并return a HttpResponse object 来呈现您的自定义模板。或者也许重定向也是合适的。
【讨论】:
中间件可能是一种解决方案:
class MyExceptionMiddleware:
def process_exception(self, request, exception):
if isinstance(exception, CustomException):
template = loader.get_template('Other500.html')
context = RequestContext(request, {'message': 'Custom Message'})
return HttpResponseForbidden(template.render(context))
return None
不要忘记在 settings.py 中注册中间件:
MIDDLEWARE_CLASSES = (
....
'app.middleware.MyExceptionMiddleware',
【讨论】:
是的……也不是。
你可以渲染任何你想要的东西(你的网络服务器有一个很好的解释如何做到这一点),但是用户是否会看到这是他的选择 - 通过他的浏览器设置。您可能会渲染某些内容,但浏览器仍会显示标准错误页面。
【讨论】: