是否可以从中间件渲染模板?

时间:2010-05-05 09:36:18

标签: django django-templates render middleware

我有一个中间件可以进行一些处理。在某些情况下,它会引发异常并且用户会看到我的500.html模板 - 正确响应500 http状态。

现在,在一些例外情况下,我想呈现与默认500.html不同的模板。是否有可能/如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

您可以捕获这些例外,并return a HttpResponse object来呈现您的自定义模板。或者也许重定向也是合适的。

答案 1 :(得分:0)

是......而且没有。

你可以渲染任何你想要的东西(你的网络服务器有一个很好的解释如何做到这一点),但是用户是否会看到这是他的选择 - 通过他的浏览器设置。您可以渲染某些内容,但浏览器仍会显示标准错误页面。

答案 2 :(得分:0)

中间件可能是一个解决方案:

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',