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

发布于 2024-09-01 02:09:00 字数 162 浏览 6 评论 0原文

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

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

I have a middleware that does some processing. On certain conditions it raises an exception and the user sees my 500.html template - correctly responding to 500 http status.

Now, on some exceptions I would like to render different template than default 500.html. Is it possible/how to achieve that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梅窗月明清似水 2024-09-08 02:09:00

您可以捕获这些异常并 返回 HttpResponse object 来呈现您的自定义模板。或者也许重定向也是合适的。

You can catch those exceptions and return a HttpResponse object to render your custom template. Or maybe a redirect is also appropriate.

戈亓 2024-09-08 02:09:00

是的……也不是。

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

Yes... and no.

You can render whatever you want (your web server has a nice explanation how to do that), but whether the user will see that is his choice - through his browser settings. It is possible you render something, but the browser still shows a standard error page.

暖阳 2024-09-08 02:09:00

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

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

A middleware might be a solution:

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

Don't forget to register the middleware in settings.py:

MIDDLEWARE_CLASSES = (
    ....
    'app.middleware.MyExceptionMiddleware',
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文