Ich erzeuge eine dynamische Form mit wtforms (und Kolben). Ich würde gerne einige benutzerdefinierte CSS-Klassen zu den Feldern hinzufügen, die ich erzeuge, aber bisher konnte ich das nicht tun. Mit der Antwort, die ich gefunden habe here, habe ich versucht, ein benutzerdefiniertes Widget zu verwenden, um diese Funktionalität hinzuzufügen. Es wird in fast genau der gleichen Art und Weise wie die Antwort auf diese Frage umgesetzt:Fügen Sie eine css-Klasse zu einem Feld in wtform hinzu
class ClassedWidgetMixin(object):
"""Adds the field's 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'
In der Ansicht, ich dies tun, das Feld zu erstellen (ClassedTextField aus Formen eingeführt, und f ist eine Instanz der Grundform):
f.test_field = forms.ClassedTextField('Test Name')
der Rest der Form korrekt angelegt wird, aber das jinja:
{{f.test_field}}
erzeugt diese Ausgabe (keine Klasse):
<input id="test_field" name="test_field" type="text" value="">
Alle Tipps wären toll, danke.
Probieren Sie den [aktualisierten Code] (http://stackoverflow.com/questions/11309779/wtforms-add-a-class-to-a-form-dynamically) und sehen, ob das hilft :-) –
Vielen Dank für Ihre schnelle Antwort! Ich habe meinen Code aktualisiert und erstelle jetzt das Feld wie folgt: 'f.test_field = forms.TextInput ('Firmenname', widget = forms.ClassedTextInput)'. Allerdings bekomme ich einen 'TypeError: __init __() hat leider einen unerwarteten Keyword-Argument 'widget'-Fehler bekommen. – pheven
Sie sollten 'StringField' nicht' TextInput' für Ihre Felddefinition verwenden :-) –