【发布时间】:2018-02-06 21:36:21
【问题描述】:
我试图简化我之前问过的一个问题。 我有一个 FieldList 表单:
class TrackForm(Form):
name = TextField('name')
start = StringField('Start Time')
end = StringField('End Time')
class Merge(Form):
item_description = FieldList(FormField(TrackForm), min_entries=2, max_entries=6)
我调用测试模板中的表格并在提交之前填写多个条目的字段。
<form method="POST" >
{{ form.hidden_tag() }}
{{ form.item_description }}
<input class="btn btn-primary" style="margin-left:300px;"type="submit" value="Submit" />
</form>
我正在使用下面的内容来迭代条目,并希望将它们全部存储在变量“newdata”中。
@app.route('/test', methods=['GET', 'POST'])
def test():
form=Merge()
if form.validate_on_submit():
for entry in form.item_description.entries:
newdata = entry.data
return redirect(url_for('test1', newdata=newdata))
return render_template(
'test.html', title='test', form=form)
@app.route('/test1', methods=['GET', 'POST'])
def test1():
newdata=request.args.get('newdata', '')
return render_template(
'test1.html', title='test1', newdata=newdata)
在 test1.html 模板中,我只是像这样调用 newdata:
{{ newdata }}
它只显示表单第一行输入的数据,不显示其他数据。你能明白为什么我只能设法捕获表单中的第一个条目吗?
更新:
当我在验证表单后尝试打印数据时,表单中的数据似乎包含输入到表单中的所有数据:
@app.route('/test', methods=['GET', 'POST']) 定义测试():
form=Merge1()
#item_description = form.item_description.data or ''
if form.validate_on_submit():
print (form.item_description.data)
for entry in form.item_description.entries:
newdata = entry.data
return redirect(url_for('test1', newdata=newdata))
return render_template(
'test.html', title='test', form=form)
^ 这表明表单条目能够存储数据。然而.....
当我在验证表单后尝试打印条目时,什么都没有打印出来:
@app.route('/test', methods=['GET', 'POST']) 定义测试():
form=Merge1()
#item_description = form.item_description.data or ''
if form.validate_on_submit():
print (form.item_description.entries)
for entry in form.item_description.entries:
newdata = entry.data
return redirect(url_for('test1', newdata=newdata))
return render_template(
'test.html', title='test', form=form)
如何使用它来创建包含所有数据的字典?
【问题讨论】:
-
查看我的更新答案。
标签: python dictionary flask wtforms