我有一个带有许多简单字段(复选框)的Flask-WTF表单。我得到了一段Python代码,它根据改变大小的csv文件创建字段变量。这意味着每次有人加载Web表单时,字段数可能会有所不同。
这是我的Flask-WTF Python代码:
from flask.ext.wtf import Form
import csv
from wtforms import TextField, RadioField, TextAreaField, SubmitField, validators, BooleanField
class ContactForm(Form):
# Creation dynamic local variables, one for each field
with open('/Fields.csv', 'rb') as f:
reader = csv.reader(f)
r = list(reader)
for i in range(1,len(r)):
locals()[''.join("field_"+str(i))] = BooleanField(str(r[i][0])+" "+str(r[i][1]))
submit = SubmitField("Send")
如果不优雅,则可行:代码生成名为field_1,field_2,field_3,...,field_n的变量(其中n是csv文件中的条目总数)。
现在,这是 - 如果我理解它 - Flask-WTF的工作原理:我需要编写一个显示这些字段的html文件。像这样:
{% extends "layout.html" %}
{% block content %}
<form action="{{ url_for('home') }}" method=post>
{{ form.hidden_tag() }}
<h2>List of checkboxes dynamically built from local csv file</h2>
#this needs to be dynamically set
{{ form.field_1.label }}
{{ form.field_1 }}
{{ form.field_2.label }}
{{ form.field_2 }}
{{ form.field_3.label }}
{{ form.field_3 }}
...
{{ form.submit }}
</form>
{% endif %}
{% endblock %}
我的问题是,不知道我的csv文件中有多少个字段,我不能预先写好这些字符串:
{{ form.field_1.label }}
{{ form.field_1 }}
有没有办法将Flask-WTF代码中的必填字段数传递给html文件,然后在html文件中以某种方式创建相应数量的字段?