繁体   English   中英

使用列表在 WTForms 字段列表中设置 label 名称

[英]Use list to set label name in WTForms fieldlist

我想使用 FieldList 通过FieldList构建表单。 我有一个字符串列表,例如: vehicles = ['car', 'truck', 'van']

我构建了我的表格,以便我有: vehicles = ['car', 'truck', 'van']

class VehicleForm(Form):
    value = DecimalField()

class VehicleEntryForm(FlaskForm):
    values = FieldList(
        FormField(VehicleForm),
        min_entries=len(vehicles))
    submit = SubmitField('Submit')

我正在使用 jinja 作为:

<form action="" method="post">
    {{ form.hidden_tag() }}
    {% for value in form.values %}
        {{value.label}}{{value()}}
    {% endfor %}
        {{ form.submit() }}
</form>

正如人们所期望的那样,这将创建一个带有通用标签的表单。 表格 label 的 html 显示为:

...<label for="values-0-value">Value</label>...
...<label for="values-1-value">Value</label>...
...<label for="values-2-value">Value</label>...

问题是如何使用我的列表更新后端的 label 值。 我试过了:

form = VehicleEntryForm()
ii = 0
for field in form.values:
    field.label = labels[ii]
    ii+=1

然后将 html/jinja 更新为:

<form action="" method="post">
    {{ form.hidden_tag() }}
    {% for value in form.values %}
        {{value.label}}{{value()}}
    {% endfor %}
        {{ form.submit() }}
</form>

然而,这导致现在有:

car<table id="values-0" label="car"><tr><th><label for="values-0-value">Value</label></th><td><input id="values-0-value" name="values-0-value" required type="text" value=""></td></tr></table>

truck<table id="values-1" label="truck"><tr><th><label for="values-1-value">Value</label></th><td><input id="values-1-value" name="values-1-value" required type="text" value=""></td></tr></table>

这让我走到了一半......但是我如何用<label for="values-0-value">Car</label> > 替换<label for="values-0-value">Value</label> <label for="values-0-value">Car</label>

注意: vehicles列表来自 model 查询,因此长度可以变化……这就是我尝试这个的原因(如果它总是只有相同的 3 件事,我就直接输入)。

如果 FieldList 和 FormField 不是这样做的方法,我愿意接受其他方法。

使用 FieldList,可以使用append_entry()添加新字段

这个 function 没有提供添加 label 的选项,但是可以在添加到form.values.entries之后进行编辑。

vehicles = ['car', 'truck', 'van']
form = VehicleEntryForm()
for vehicle in vehicles:
    form.values.append_entry(data='foo')
    form.values.entries[-1].label.text = vehicle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM