21

Pythonからフォームの(css)クラスを送信する方法はありますか?例えば:

class Company(Form):
    companyName = TextField('Company Name', [validators.Length(min=3, max = 60)])

これは単純なテキストフィールドをレンダリングしますが、そのテキストフィールドにcssクラスを持たせたいのですが、それ.companyNameはPythonから直接可能ですか?

私はid="companyName"Pythonから直接置くことができるが、クラスはできないことを知っています。

ヘルプ。

更新:試しclass_="companyName"ましたが、機能しませんでした:

__init__() got an unexpected keyword argument '_class'
4

4 に答える 4

54

または、jinja2 の場合、次のようにテンプレートにクラスを追加することもできます。

{{ form.name(size=20, class_='input-small') }}
于 2012-09-28T15:48:57.810 に答える
28

WTForms では、フィールドの初期化で表示オプション (クラス名など) を設定できません。ただし、これを回避するにはいくつかの方法があります。

  1. すべてのフィールドにクラス名と ID を含める必要があるshort_name場合は、レンダリング時に各フィールドを渡すだけです。

    <dl>
    {% for field in form %}
    <dt>{{field.label}}</dt>
    <dd>{{field(class_=field.short_name)}}</dd>
    {% endfor %}
    </dl>
    
  2. クラス名を提供するカスタム ウィジェットミックスインを作成します。

    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)
    
于 2012-07-04T14:59:16.087 に答える
10

WTForms >= 2.1を使用するrender_kw場合に使用:

submit = SubmitField(u'Block Submit Buttom', render_kw={"class": "btn btn-primary btn-block"})
于 2016-05-26T11:20:51.423 に答える
0

テンプレートで試してみてください

{{ form.companyName( **{'class': 'companyName'} ) }}
于 2015-02-26T07:26:35.990 に答える