pythonからフォームの(css)クラスを送信する方法はありますか?例えば:
class Company(Form):
companyName = TextField('Company Name', [validators.Length(min=3, max = 60)])
これは単純なテキストフィールドをレンダリングしますが、そのテキストフィールドに.companyName
のcssクラスを持たせたいのですが、Pythonから直接可能ですか?
id="companyName"
をPythonから直接配置できることは知っていますが、クラスは配置できません。
助けて。
更新:class_="companyName"
を試しましたが、機能しませんでした。
__init__() got an unexpected keyword argument '_class'
WTFormsでは、フィールドの初期化で表示オプション(クラス名など)を設定することはできません。ただし、これを回避するにはいくつかの方法があります。
すべてのフィールドにクラス名とIDを含める必要がある場合は、各フィールドの short_name
レンダリングするとき:
<dl>
{% for field in form %}
<dt>{{field.label}}</dt>
<dd>{{field(class_=field.short_name)}}</dd>
{% endfor %}
</dl>
クラス名を提供する カスタムウィジェット ミックスインを作成します。
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)
または、次のようにjinja2のクラスをテンプレートに追加できます。
{{ form.name(size=20, class_='input-small') }}
使用する render_kw
使用する場合 WTForms> = 2.1 :
submit = SubmitField(u'Block Submit Buttom', render_kw={"class": "btn btn-primary btn-block"})
テンプレートで試してみてください
{{ form.companyName( **{'class': 'companyName'} ) }}