Omn*_*ver 5 python flask wtforms flask-wtforms
我想基于的字典定义带有字段的表单类name: label。我尝试了以下方法,这些方法几乎奏效了。但是,在模板中渲染字段给了AttributeError: 'UnboundField' object has no attribute '__call__'。如何动态向表单添加字段?
def build_form(name, record):
class ContactForm(FlaskForm):
name = StringField(name)
fieldlist = {}
for key, value in record.items():
fieldlist[key] = StringField(key)
@app.route('/', methods=['GET', 'POST'])
def showform():
form = ContactForm(request.form)
if request.method == 'POST':
return 'form processed'
return render_template('cardcompare.tpl', record=record, form=form)
Run Code Online (Sandbox Code Playgroud)
def build_form(name, record):
class ContactForm(FlaskForm):
name = StringField(name)
fieldlist = {}
for key, value in record.items():
fieldlist[key] = StringField(key)
@app.route('/', methods=['GET', 'POST'])
def showform():
form = ContactForm(request.form)
if request.method == 'POST':
return 'form processed'
return render_template('cardcompare.tpl', record=record, form=form)
Run Code Online (Sandbox Code Playgroud)
使用setattr添加新领域的窗体类的属性。这将导致WTForms正确设置字段,而不是保留未绑定的字段。
# form class with static fields
class MyForm(FlaskForm):
name = StringField('static field')
record = {'field1': 'label1', 'field2': 'label2'}
# add dynamic fields
for key, value in record.items():
setattr(MyForm, key, StringField(value))
Run Code Online (Sandbox Code Playgroud)
在模板中,您可以使用attr过滤器遍历字段。
{% for key, value in record.items() %}:
{{ form|attr(key)() }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4679 次 |
| 最近记录: |