如何允许在 web2py 中提交多个表单?
How to allow multiple form submissions in web2py?
谢天谢地,web2py 使用隐藏的 _formkey
值自动防止提交多个表单。在大多数情况下,当提交表单时,页面会再次加载,因此会生成一个新键。但是,由于我是使用 web2py 的 ajax
函数提交我的表单,所以我在没有刷新页面的情况下得到了结果,因此表单密钥保持不变,以后的提交是不可能的。
我应该如何处理这种情况?
您可以考虑为表单创建一个单独的操作并通过 Ajax 组件将整个表单加载到页面中:
def index():
form_component = LOAD('default', 'form.load', ajax=True)
return dict(form_component=form_component)
def form():
form = FORM(...).process()
return dict(form=form)
在 index.html 视图中,您将通过 {{=form_component}}
包含组件,而在 form.load 视图中,您将通过 {{=form}}
包含表单本身(请注意,form.load 视图不应扩展布局,因为它最终将通过 Ajax).
插入到 index.html 页面中
现在整个表单将通过 Ajax 加载,并通过 Ajax 自动提交,新表单也通过 Ajax return 编辑(所以你根本不需要写任何Javascript代码。
或者,如果您想坚持当前的方法,您可以让控制器 return 整个表单响应 Ajax 请求,并设置 ajax()
函数添加到包含表单的 div 的 ID。在这种情况下,在 Ajax 请求完成后,整个表单将被替换为一个新表单(它将有一个新的 _formkey)。
谢天谢地,web2py 使用隐藏的 _formkey
值自动防止提交多个表单。在大多数情况下,当提交表单时,页面会再次加载,因此会生成一个新键。但是,由于我是使用 web2py 的 ajax
函数提交我的表单,所以我在没有刷新页面的情况下得到了结果,因此表单密钥保持不变,以后的提交是不可能的。
我应该如何处理这种情况?
您可以考虑为表单创建一个单独的操作并通过 Ajax 组件将整个表单加载到页面中:
def index():
form_component = LOAD('default', 'form.load', ajax=True)
return dict(form_component=form_component)
def form():
form = FORM(...).process()
return dict(form=form)
在 index.html 视图中,您将通过 {{=form_component}}
包含组件,而在 form.load 视图中,您将通过 {{=form}}
包含表单本身(请注意,form.load 视图不应扩展布局,因为它最终将通过 Ajax).
现在整个表单将通过 Ajax 加载,并通过 Ajax 自动提交,新表单也通过 Ajax return 编辑(所以你根本不需要写任何Javascript代码。
或者,如果您想坚持当前的方法,您可以让控制器 return 整个表单响应 Ajax 请求,并设置 ajax()
函数添加到包含表单的 div 的 ID。在这种情况下,在 Ajax 请求完成后,整个表单将被替换为一个新表单(它将有一个新的 _formkey)。