【问题标题】:Use list to set label name in WTForms fieldlist使用 list 在 WTForms fieldlist 中设置标签名称
【发布时间】:2021-07-09 22:15:09
【问题描述】:

我想使用FieldList 通过 WTForms 构建表单。我有一个字符串列表,例如: 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>

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

...<label for="values-0-value">Value</label>...
...<label for="values-1-value">Value</label>...
...<label for="values-2-value">Value</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>

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

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

如果 FieldList 和 FormField 不可行,我愿意接受替代方法。

【问题讨论】:

    标签: python flask jinja2 flask-wtforms wtforms


    【解决方案1】:

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

    此功能没有添加标签的选项,但在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
    

    【讨论】:

      猜你喜欢
      • 2015-07-19
      • 2013-03-16
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      相关资源
      最近更新 更多