我很想找到解释如何使用wtforms创建自定义小部件的资源 . 我想显示一个切换按钮列表 . 到目前为止,我已经能够创建一个复选框列表

SelectMultipleFields:
  class PrecisionForm(FlaskForm):
    phone_number = StringField('Phone number', [validators.Length(min=4, max=25)])
    contact_emails = SelectMultipleField(
        'Contact emails',
        [at_least_one],
        choices=[],
        option_widget=widgets.CheckboxInput(),
        widget=widgets.ListWidget(prefix_label=False)
     )

但现在我想用我的自定义小部件修改我的 widget.CheckBoxInput() ,如下所示:

<label class='switch'> <input type='checkbox'><span class='slider round'></span></label>

如果有人能够逐步解释如何做到这一点,我将非常感激 .

--UPDATE--

我找到了一种方法来实现我想做的事情但看起来很糟糕:

class ToggleButtonWidget(object):
    def __call__(self, field):
        html = '<label class="switch"><input type="checkbox" id={} name={} value={}><span class="slider round"></span></label>'.format(field.id, field.name, field.label.__dict__['text'])
        return HTMLString(html)

特别是这部分: field.label.__dict__['text'] 我用来设置我的复选框的值(来自wtforms的字段对象没有属性值) . 有没有更好的办法 ?