【发布时间】:2016-02-19 13:32:26
【问题描述】:
我有一个多部分的表单要生成 - 考虑类似于购物车的工作流程,其中您有多个“部分”(例如详细信息、帐单、付款等),一次显示一个表单。
关键细节:
- 表单有 3 个部分
- 这些部分必须按顺序完成,第 2 部分依赖于第 1 部分的信息
- 除非此人完成完整流程(第 1、2 和 3 节),否则表单数据是无用的(例如将被丢弃)。
我考虑过的方法:
- 使用一个路由
def并在request.args中存储一个值,告诉我我在哪个“部分”然后render_template根据部分不同的表单模板。这感觉很老套…… - 每个部分都有不同的路线和视图。这感觉不对,我必须阻止人们通过 URL 直接进入第 2 步
- 将所有部分放在一个表单上,使用 Javascript 隐藏一个表单的各个部分并以这种方式在各个部分之间移动
在 Flask/WTForms 中完成此任务的最佳方法是什么?我上面发布的所有方法似乎都不正确,我毫不怀疑这是一个相当普遍的要求。
【问题讨论】:
-
就个人而言,我认为这是一个使用 jinja 模板的好情况,但我不是专家,所以我不能说它是最好的,甚至是正确的。如果你在第 1 节中获得所需的数据,则显示第 2 节,如果你在第 2 节中获得数据,等等。这种仅使用 Flask-Wtforms 的方法需要一个提交按钮。除非您想添加 Javascript 事件。我很想知道什么对你有用。
-
@skywalker 如何通过 Jinja 实现?模板不是只被点击一次然后渲染吗?所以递归渲染也需要一个按钮,不是吗?
-
您使用的表格是什么?这可能取决于您的表单是什么,但您可以从 Python 端的表单中检测数据,并将其传递到 Jinja 模板,然后可以有条件地显示表单的某些部分。是的,这种方法需要提交按钮。除非例如,您正在使用选择多个字段,您可以通过 JavaScript 检测到状态的变化。
标签: python flask wtforms flask-wtforms