【问题标题】:Creating an N-Amount of Forms using WTForms使用 WTForms 创建 N 个表单
【发布时间】:2015-05-27 16:05:04
【问题描述】:

我是 Flask 和 WTForms 的新手,非常抱歉。

无论如何,我正在尝试使用forms.py 中定义的相同表单创建多个表单

File_Choices = [('1', 'ex1.pdf'), ('2', 'ex2.pdf')
class Inputs(Form):
    Files = SelectField(u'File', choices=File_Choices,validators =[Required()])

我知道我必须按照以下方式声明一些内容:form1=Inputs() 才能在 views.py 中声明一个表单,但是当我需要声明未知数量的表单并跟踪选定的值。

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

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

因此,如果列表的长度为 5,则最终结果为 5 输入表单声明为 form1、form2、form3、form4、form5。我知道这显然不像我刚刚编写的那样工作,但这是我想要获得的功能,所以我仍然可以使用类似

的方式访问提交的值

dict(File_Choices).get(form'i'.Files.data).

可能有一个非常明显的方法可以做到这一点,但是,我是使用烧瓶和 WTForms 的新手,所以如果你能逐步解释你在做什么,因为我是新手,任何帮助都将受到赞赏,并且在你的解决方案中,那太棒了。

【问题讨论】:

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


    【解决方案1】:

    我相信你想要的是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 指定表单上应该存在多少个“SelectFields”。这样,您就有了一个包含多个下拉选择字段的表单,每个字段都有相同的 file_choices 列表。

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

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

    您还可以遍历 form.files 并单独设置每个 SelectField 的样式

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

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

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

    form.files[2].data
    

    将根据用户在 SelectField 中选择的文件返回“1”或“2”

    【讨论】:

    • 我看到这是我正在寻找的功能,但是我仍然对如何从用户访问所选字段感到有些困惑。我试过查看文档,但似乎找不到任何东西。
    • 查看我的答案的更新。 FieldLists 本质上是字段列表,因此您可以像其他 python 列表一样访问持有的字段:直接索引、迭代器、长度。在这种情况下,列表中的每个项目都是一个 SelectField。
    • 是的,谢谢,这正是我想要的!
    猜你喜欢
    • 2018-01-24
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多