ver*_*hio 19 css python flask wtforms
有没有办法从python发送一个表单(css)类?例如:
class Company(Form):
companyName = TextField('Company Name', [validators.Length(min=3, max = 60)])
Run Code Online (Sandbox Code Playgroud)
这呈现了一个简单的文本字段,但我希望该文本字段具有css类.companyName,是否可以直接从python?
我知道我可以id="companyName"直接从python中放入,但不能放入类.
救命.
更新:我试过class_="companyName",它没有用,我得到了:
__init__() got an unexpected keyword argument '_class'
Run Code Online (Sandbox Code Playgroud)
por*_*ors 49
或者,您可以在模板中添加类,如jinja2:
{{ form.name(size=20, class_='input-small') }}
Run Code Online (Sandbox Code Playgroud)
Sea*_*ira 26
WTForms不允许您在字段初始化中设置显示选项(例如类名).但是,有几种方法可以解决这个问题:
如果您的所有字段都应包含类名和ID,那么在short_name渲染时只需将每个字段传递给它:
<dl>
{% for field in form %}
<dt>{{field.label}}</dt>
<dd>{{field(class_=field.short_name)}}</dd>
{% endfor %}
</dl>
Run Code Online (Sandbox Code Playgroud)创建一个提供类名的自定义小部件 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)
Run Code Online (Sandbox Code Playgroud)render_kw如果使用WTForms> = 2.1,请使用:
submit = SubmitField(u'Block Submit Buttom', render_kw={"class": "btn btn-primary btn-block"})
Run Code Online (Sandbox Code Playgroud)