如何使用Materialise和WTForms的单选按钮?

时间:2017-01-04 23:35:10

标签: python flask materialize flask-wtforms

在Materialise中,您可以使用属性name定义单选按钮的单选按钮组,但Flask-WTForms会使用属性name绑定输入。

如果我的模板中有以下内容:

{{ form.radio1(type='radio', name='group1') }}
{{ form.radio2(type='radio', name='group1') }}

会出现错误:

TypeError: html_params() got multiple values for keyword argument 'name'

如果我们不添加名称,那么无线电将无法像预期那样用作无线电,就像复选框一样。

我怎样才能解决这个问题?

这是我的表单类:

class AbcForm(FlaskForm):
    field1 = HiddenField('Field1')
    field2 = HiddenField('Field2')

然后在运行时我会动态添加无线电,这里有一个简化:

class F(AbcForm):
    pass

    setattr(F, radio1, BooleanField('Radio1')
    setattr(F, radio2, BooleanField('Radio2')

form = F(field1=x, field2=y)

1 个答案:

答案 0 :(得分:2)

您无法在字段中设置name属性,wtforms已为您执行此操作。

使用RadioField代替HiddenField:

from wtforms import RadioField
from flask_wtf import Form

class YourForm(Form):
    radio_group = RadioField('label', choices=[('value','description'),('value_two','some other description')])
    (...)

然后,在您的终端中:

@route('/your/route')
def your_endpoint():
    your_form = YourForm()
    (...)
    return render_template('/your/template.html', form=your_form)

最后,在您的模板中:

<form action="#">
    {% for subfield in form.radio_group %}
    <p>
        {{ subfield }}
        {{ subfield.label }}
    </p>
    {% endfor %}
</form>

这将生成以下代码:

  <form action="#">
    <p>
      <input id="radio_group-0" name="radio_group" type="radio" value="value">
      <label for="radio_group-0">description</label>
    </p>
    <p>
      <input id="radio_group-1" name="radio_group" type="radio" value="value_two">
      <label for="radio_group-1">some other description</label>
    </p>
  </form>

其中,如果物料化包含在模板中,则会正确显示单选按钮,如this plunker所示。

相关问题