Wtforms, добавить класс к форме динамически

Есть ли способ, которым я мог бы отправить класс формы (css) из Python? Например:

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

Это делает простое текстовое поле, но я хочу, чтобы это текстовое поле имело класс css.companyNameЭто возможно прямо из Python?

Я знаю, что могу поставитьid="companyName" прямо из питона, но не из класса.

Помогите.

Обновить: Я старалсяclass_="companyName" и это не сработало, я получил:

__init__() got an unexpected keyword argument '_class'

Ответы на вопрос(4)

В качестве альтернативы вы можете добавить класс в свой шаблон, например, для jinja2:

{{ form.name(size=20, class_='input-small') }}
 09 июн. 2015 г., 22:09
Я бы проголосовал десять раз, если это возможно, это гораздо лучшее решение. Теперь я могу сидеть сложа руки и смотреть рок WTForms ~~~
 26 февр. 2015 г., 08:16
Ты спас меня. Искренне спасибо !!
 26 мая 2015 г., 06:09
Спасли и меня :) Это замечательное решение, не знаю, почему пример такого рода не находится где-то в документации WTForm.
 01 янв. 2016 г., 17:34
Это решение намного лучше, чем выбранное в качестве правильного ответа.
 09 июн. 2015 г., 22:21
Хотя подчеркивание после класса, по-видимому, не является необходимым

В своем шаблоне попробуйте

{{ form.companyName( **{'class': 'companyName'} ) }}
 17 окт. 2015 г., 15:30
В функциях Python вы не можете использовать "класс" в качестве именованного аргумента, потому что это ключевое слово языка. Например,myfunc(class='xyz') приводит к синтаксической ошибке. С использованиемmyfunc(**{'class': 'xyz'}) как показано выше, обходит эту проблему. Спасибо за ваш пример!
Решение Вопроса

WTForms не позволяет вам устанавливать параметры отображения (например, имя класса) в поле инициализации. Однако есть несколько способов обойти это:

If all of your fields should include a class name as well as an ID then just pass in each field's short_name to it when you render it:

<dl>
{% for field in form %}
<dt>{{field.label}}</dt>
<dd>{{field(class_=field.short_name)}}</dd>
{% endfor %}
</dl>

Create a custom widget mixin that provides the class name:

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)
 verrochio05 июл. 2012 г., 19:03
Спасибо. Очень полезно!

render_kw при использованииWTForms & gt; = 2.1 :

submit = SubmitField(u'Block Submit Buttom', render_kw={"class": "btn btn-primary btn-block"})
 21 февр. 2018 г., 16:57
Это работает для меня много дней, но сейчас это не удалось. Я не помню, что я тогда делал, но почти так же, как ваш ответ. После Ctrl + F5 кнопка отправки также показывает классbtn btn-default: - (... Любые возможные ошибки?WTForms==2.1 а такжеFlask-WTF==0.14.2

Ваш ответ на вопрос