【问题标题】:Custom parameter in Flask-WTFoms fieldFlask-WTFoms 字段中的自定义参数
【发布时间】:2016-09-17 08:40:16
【问题描述】:

forms.py

my_field = TextField(u"Enter a number", validators=[Required('This Field is Required')])

my_form.html

<table>
  <tr>
    <td colspan="4"> 
      {{form.my_field(placeholder= form.my_field.label.text, class_="form-control")}}
      {% for error in form.my_field.errors %}
          <span>{{error}}</span>
      {% endfor %}
    </td>
  </tr>
</table>

这是一个简单的代码。但我想按照this 的方式在循环中呈现所有输入字段,而不是为每个字段编写代码。但是每个字段在对应的&lt;td&gt; 中会有不同的colspan 值。

如何为 colspan 添加可在&lt;td&gt; 中使用的自定义参数?

类似:(只是上面代码中的diff

forms.py

my_field = TextField(colspan="4")

my_form.html

<td colspan={{form.my_field.colspan}}>

【问题讨论】:

    标签: python flask jinja2 flask-wtforms


    【解决方案1】:

    您需要创建一个带有额外colspan 属性的custom field

    首先定义自定义字段子类TextField

    class MyCustomTextField(TextField):
        def __init__(self, colspan=4, *args, **kwargs):
            super(MyCustomTextField, self).__init__(*args, **kwargs)
            self.colspan = colspan
    

    现在在表单中使用自定义字段:

    class MyForm(Form):
        my_field = MyCustomTextField(4, u"Enter a number", validators=[Required('This Field is Required')])
    

    看到MyCustomTextField 的第一个参数(在这种情况下为4)吗?那是你的 colspan 属性。

    最后,像这样访问模板中的属性:

    <td colspan="{{form.my_field.colspan}}">
    

    【讨论】:

    • 这个自定义类是个好主意,但我总是忘记。但在这种情况下,我需要为所有字段创建一个通用的自定义类。不仅仅是TextField,就我而言,我有20 多个表单字段,其中几乎所有类型的输入字段都可用。有没有可能创造出这样的东西?
    • 这很难。我已经搞砸了一段时间,试图将父类 Field 子类化,然后尝试更改其他领域的父类,从其他答案中获取一些想法:stackoverflow.com/a/9541560/3632543 但我没有成功,另外有人提到这不是一个好主意。最简单的(虽然我理解有点笨拙)的方法是定义你自己的字段集,对你需要的每个字段进行子分类。我知道要编写相当多的代码,但应该是一次性的工作并且非常简单。
    • 是的。这将是一次性的工作,也可以在将来的使用中使用。谢谢。
    猜你喜欢
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多