【问题标题】:Flask dynamically generate formFlask 动态生成表单
【发布时间】:2017-12-08 21:42:13
【问题描述】:

如何在 Flask 中创建可变大小的表单?

这是我的forms.py:

from flask_wtf import Form
from wtforms import StringField, BooleanField, SelectField, TextField
from wtforms.validators import DataRequired

class TestForm(Form):
    blanks = .... 

    test = []
    foreach blank in blanks
        test.append(TextField(blank, [validators.Length(min=5, max=70)]))

这是我的模板:

<form action="" method="post" name="test">
  {{ form.hidden_tag() }}
  {% for test in form.tests %}
    {{ test }}
  {% endfor %}
  <p><input type="submit" value="Test"></p>
</form>

它显示“TextField...”而不是显示表单输入的实际 HTML。我究竟做错了什么?我应该如何正确地做到这一点?

【问题讨论】:

  • blanks 的值是多少?
  • blanks的值基本上是:blanks = ["string1", "string2", "string3", "string4"]

标签: python


【解决方案1】:

首先,您在表单类中将变量命名为test,但在模板中循环了tests,但这可能只是一个错字。

核心问题是,您正在创建一个列表作为类属性,但您在模板中访问的表单是类的对象,而不是类本身。要为每个表单设置一个类属性(这是 wtform 为您生成字段的方式),您必须在导入后修改该类。例如 this answer on stackoverflow 中的 setattr()。

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2012-11-15
    • 2015-03-05
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多