有没有办法从python发送一个表单(css)类? 例如:
class Company(Form):
companyName = TextField('Company Name', [validators.Length(min=3, max = 60)])
这呈现了一个简单的文本字段,但我希望该文本字段具有.companyName
的css类,是否可以直接从python中获取?
我知道我可以直接从python中放置id="companyName"
,但不能放入类。
帮助。
更新:
我试过class_="companyName"
并且它没有用,我得到了:
__init__() got an unexpected keyword argument '_class'
答案 0 :(得分:45)
或者,您可以在模板中添加类,如jinja2:
{{ form.name(size=20, class_='input-small') }}
答案 1 :(得分:26)
WTForms不允许您在字段初始化中设置显示选项(例如类名)。但是,有几种方法可以解决这个问题:
如果您的所有字段都应包含类名和ID,那么在渲染时只需将每个字段的short_name
传递给它:
<dl>
{% for field in form %}
<dt>{{field.label}}</dt>
<dd>{{field(class_=field.short_name)}}</dd>
{% endfor %}
</dl>
创建一个提供类名称的custom widget mixin:
from wtforms.fields import StringField
from wtforms.widgets import TextInput
class ClassedWidgetMixin(object):
"""Adds the field's name as a class
when subclassed with any WTForms Field type.
Has not been tested - may not work."""
def __init__(self, *args, **kwargs):
super(ClassedWidgetMixin, self).__init__(*args, **kwargs)
def __call__(self, field, **kwargs):
c = kwargs.pop('class', '') or kwargs.pop('class_', '')
kwargs['class'] = u'%s %s' % (field.short_name, c)
return super(ClassedWidgetMixin, self).__call__(field, **kwargs)
# An example
class ClassedTextInput(ClassedWidgetMixin, TextInput):
pass
class Company(Form):
company_name = StringField('Company Name', widget=ClassedTextInput)
答案 2 :(得分:7)
如果使用WTForms >= 2.1:
,请使用render_kw
submit = SubmitField(u'Block Submit Buttom', render_kw={"class": "btn btn-primary btn-block"})
答案 3 :(得分:0)
在您的模板中,尝试
{{ form.companyName( **{'class': 'companyName'} ) }}