您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将CSS类添加到WTForms SelectField中的选项

将CSS类添加到WTForms SelectField中的选项

如果您深入肠中WTForms,会发现一个名为SelectField

这是称为build html字符串的方法

@classmethod
def render_option(cls, value, label, selected, **kwargs):
    options = dict(kwargs, value=value)
    if selected:
        options['selected'] = True
    return HTMLString('<option %s>%s</option>' % (html_params(**options), escape(text_type(label))))

这是__call__调用render_options上面定义的函数方法

def __call__(self, field, **kwargs):
    kwargs.setdefault('id', field.id)
    if self.multiple:
        kwargs['multiple'] = True
    html = ['<select %s>' % html_params(name=field.name, **kwargs)]
    for val, label, selected in field.iter_choices():
        html.append(self.render_option(val, label, selected))
    html.append('</select>')
    return HTMLString(''.join(html))

您将无法class通过简单地实例化一个属性添加属性SelectField。执行此操作时,它将Option隐式创建实例。在渲染时将render_options这些隐式实例方法只与调用valselectedlabel论据。

您可以Option在事实之后访问隐式实例。这并非没有问题。如果您查看@Johnston的示例:

>>> i = 44
>>> form = F()
>>> for subchoice in form.a:
...     print subchoice(**{'data-id': i})
...     i += 1

他正是这样做的。但是您必须在渲染时为类提供属性。该调用subchoice(**{'data-id': i})实际上吐出了预期的值HTML。如果要WTForms与模板引擎集成,则会带来很多问题。因为类似的东西jinja正在为您调用这些渲染函数

如果需要这种行为,建议您编写自己的实现SelectField,使您可以将属性传递给隐式Option实例。这样,模板引擎就可以处理调用事务,render并且您可以将表单的定义合并到forms.py文件

CSS 2022/1/1 18:47:52 有511人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶