【发布时间】:2019-09-16 05:21:01
【问题描述】:
我正在尝试使用字典中的表单字段填充 jinja2 中的表单。
#forms.py
class MyForm(FlaskForm):
name = StringField('New Name', validators=[DataRequired()])
fields = {}
fields['Field1'] = StringField('Field 1', validators=[DataRequired()])
fields['Field2'] = StringField('Field 2', validators=[DataRequired()])
#routes.py
@app.route('/test', methods=['GET', 'POST'])
def test():
form = MyForm()
return render_template('_test.html', form=form)
我的python代码和上面的代码类似。如果我尝试在 jinja2 中插入 name 字段,它可以正常工作。
{{ form.name.label(class="form-control-label form-control-sm") }}
但是,我不知道如何对 fields 字典中的字段执行相同操作。如果我使用以下内容,它会给我一个错误。(jinja2.exceptions.UndefinedError: 'wtforms.fields.core.UnboundField object' has no attribute 'label')
{{ form.fields['Field1'].label(class="form-control-label form-control-sm") }}
是否可以按照我尝试使用的方式使用字典,或者如果我有大量字段,是否有替代方法。我使用字典的目标是使用 jinja2 循环遍历字典元素以插入所有字段而无需一一键入。
【问题讨论】:
-
您不能在表单之外使用字段。你为什么这样做?
-
我没有在表单之外使用它们。你为什么说我在表格之外使用它?我不确定你的意思是什么?
-
那我看不懂你的代码。表格在哪里定义,字典从哪里来?请显示完整视图。
-
编辑了代码。这有帮助吗?
标签: python html flask jinja2 wtforms