使用WTForms创建N量的表单

时间:2015-05-27 16:05:05

标签: python python-2.7 flask wtforms flask-wtforms

我对于瓶子和WTForms很新,所以提前抱歉。

无论如何,我尝试使用<span class="social_count"><?php echo get_pins(); ?></span>

中定义的相同表单创建多个表单
forms.py

我很熟悉这样一个事实,即我必须在File_Choices = [('1', 'ex1.pdf'), ('2', 'ex2.pdf') class Inputs(Form): Files = SelectField(u'File', choices=File_Choices,validators =[Required()]) 中声明一些内容,以便在form1=Inputs()中声明一个表单,但是当我需要声明一个未知数量的形成并跟踪选定的值。

我的具体问题是我有一个包含N个元素的列表,每个元素必须对应于用户从表单中选择的文件。所以我将我的问题分解为仅创建N个表单并考虑使用这样的for循环:

views.py

因此,如果列表的长度为5,那么最终产品是5个输入形式,声明为form1,form2,form3,form4,form5。我知道这显然不会像我刚刚编写的那样工作,但这是我试图获得的功能所以我仍然可以使用像

这样的东西访问提交的值

for i in range(len(PDF_list)) form'i'=Input()

Theres可能是一个非常明显的方法,但是,我对使用flask和WTForms感到很陌生,所以任何帮助都会受到赞赏,如果你能逐步解释你自己做了什么,那么你的解决方案是什么? #39; m new,那将是非常棒的。

1 个答案:

答案 0 :(得分:2)

我相信你想要的是FieldList

所以你有类似的东西:

from wtforms.fields import FieldList

file_choices = [('1', 'ex1.pdf'), ('2', 'ex2.pdf')
class Inputs(Form):
    files = FieldList(
        SelectField(u'File', choices=file_choices, validators =[Required()]),
        min_entries = N
    )

min_entries指定了多少&#34; SelectFields&#34;应该出现在表格上。这样,您就有一个具有多个下拉选择字段的表单,每个字段都具有相同的file_choices列表。

在模板文件中,您可以输出所有这样的选择字段(这将显示所有N个选择字段:

<html>
    <form action="" method=post>
        {{ form.files }}
        <input type="submit" />
    </form>
</html>

您还可以对form.files进行迭代,并为每个SelectField单独设置样式

现在,当您的表单发布时,您可以通过迭代SelectField来访问每个form.files,如下所示:

for select_field in form.files:
    print(select_field.data)

您还可以使用索引访问SelectField。要访问第三个SelectField

form.files[2].data

将返回&#39; 1&#39;或者&#39; 2&#39;取决于用户在SelectField

中选择的文件