Ответ 1
WTForms не позволяет вам устанавливать параметры отображения (такие как имя класса) в инициализации поля. Однако есть несколько способов обойти это:
-
Если все ваши поля должны включать имя класса, а также идентификатор, то просто передайте в каждое поле
short_name
значение это когда вы его визуализируете:<dl> {% for field in form %} <dt>{{field.label}}</dt> <dd>{{field(class_=field.short_name)}}</dd> {% endfor %} </dl>
-
Создайте настраиваемый виджет mixin, который предоставляет имя класса:
from wtforms.fields import StringField from wtforms.widgets import TextInput class ClassedWidgetMixin(object): """Adds the field 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)