Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Django CMS中的插件重定向?_Django_Django Cms - Fatal编程技术网

如何从Django CMS中的插件重定向?

如何从Django CMS中的插件重定向?,django,django-cms,Django,Django Cms,我在插件中有一个表单,在提交时我需要重定向到另一个页面 实现这一目标的最佳方式是什么 所以可能的解决方案是: 使用应用程序挂钩 在插件呈现方法中抛出一个异常,该异常将被中间件类捕获,并从此处执行重定向 创建一个中间件类,并在“process\u response”方法中检查请求对象上的值,该值是在插件的render方法中添加的,然后执行重定向 插件并不真正适合处理POST请求,也无法从插件影响HTTP响应对象(该响应的内容除外) 插件没有处理POST请求的钩子的原因是,一个页面通常由几个插件组

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

实现这一目标的最佳方式是什么



所以可能的解决方案是:

  • 使用应用程序挂钩
  • 在插件呈现方法中抛出一个异常,该异常将被中间件类捕获,并从此处执行重定向
  • 创建一个中间件类,并在“process\u response”方法中检查请求对象上的值,该值是在插件的render方法中添加的,然后执行重定向

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

    插件没有处理POST请求的钩子的原因是,一个页面通常由几个插件组成,要弄清楚哪个插件应该处理POST请求将非常困难。出于同样的原因,他们无法更改响应,因为两个插件可能会尝试以不兼容的方式更改响应


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

    这是一个呈现表单的自定义插件。好的,因此您还需要通过CMS应用程序挂钩将页面连接到处理帖子的视图。然后你就可以重新定向了。我很害怕。根据我所研究的,唯一的解决方案是在插件中抛出一个异常,并在中间件类中捕获它。或者在请求中添加一些东西,并在呈现后在某处使用中间件来执行重定向。那么,当插件呈现表单时,您能否将表单操作指向您想要的视图,然后从那里处理重定向?一种选择是使用ajax提交表单,然后处理重定向客户端。那么你就不必有应用程序挂钩了。