Я создаю динамическую форму, используя wtforms (и флягу). Я хотел бы добавить некоторые пользовательские классы css в поля, которые я создаю, но до сих пор я не мог этого сделать. Используя ответ, который я нашел здесь, я попытался использовать собственный виджет, чтобы добавить эту функциональность. Он реализуется почти так же, как и ответ на этот вопрос:
class ClassedWidgetMixin(object):
"""Adds the field name as a class.
(when subclassed with any WTForms Field type).
"""
def __init__(self, *args, **kwargs):
print 'got to classed widget'
super(ClassedWidgetMixin, self).__init__(*args, **kwargs)
def __call__(self, field, **kwargs):
print 'got to call'
c = kwargs.pop('class', '') or kwargs.pop('class_', '')
# kwargs['class'] = u'%s %s' % (field.name, c)
kwargs['class'] = u'%s %s' % ('testclass', c)
return super(ClassedWidgetMixin, self).__call__(field, **kwargs)
class ClassedTextField(TextField, ClassedWidgetMixin):
print 'got to classed text field'
В представлении я делаю это для создания поля (ClassedTextField импортируется из форм, а f является экземпляром базовой формы):
f.test_field = forms.ClassedTextField('Test Name')
Остальная часть формы создается правильно, но этот jinja:
{{f.test_field}}
производит этот вывод (без класса):
<input id="test_field" name="test_field" type="text" value="">
Любые советы будут замечательными, спасибо.