【问题标题】:How can I do a redirect from a plugin in Django CMS?如何从 Django CMS 中的插件进行重定向?
【发布时间】:2013-05-10 19:04:27
【问题描述】:

我在插件中有一个表单,在提交时我需要重定向到另一个页面。

最好的方法是什么?



因此可能的解决方案是:

  1. 使用 App-Hook
  2. 在插件渲染方法中引发异常,该异常会被中间件类捕获并从那里进行重定向。
  3. 创建一个中间件类并在“process_response”方法期间检查在插件的渲染方法期间添加的请求对象上的值,然后执行重定向。

【问题讨论】:

  • 它是一个呈现表单的自定义插件。
  • 好的,所以您还需要将您的页面挂钩到通过 CMS App Hook 处理 POST 的视图。然后你就可以进行重定向了。
  • 害怕那个。从我研究过的唯一其他解决方案是在插件中抛出异常并在中间件类中捕获它。要么在请求中添加一些东西,要么在渲染后在某处使用中间件来进行重定向。
  • 好吧,当你的插件渲染表单时,你能不能只将表单动作指向你想要的视图,然后从那里处理重定向?一种选择是对表单进行 ajax 提交,然后在客户端处理重定向。那么你就不必有一个应用程序挂钩。

标签: django django-cms


【解决方案1】:

插件并不真正适合处理 POST 请求,并且无法从插件影响 HTTP 响应对象(除了该响应的内容)。

插件没有处理 POST 请求的钩子的原因是单个页面通常由多个插件组成,并且确定哪个插件应该处理 POST 请求将非常困难。出于同样的原因,它们无法更改响应,因为两个插件可能会尝试以不兼容的方式更改响应。

解决方案是为您的插件提供一个专用的 POST 端点(通过 urlpatterns 或通过 Apphook 静态)。然后该端点将重定向到另一个页面或表单所在的页面,因此插件将发送一些数据。或者,插件通过 AJAX 将表单提交到该端点并在 javascript 中重定向/执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多