template form fields data python css flask wtforms

python - fields - Wtforms, agregar una clase a un formulario dinĂ¡micamente



send form flask (4)

¿Hay alguna manera de enviar una clase de formulario (css) desde python? Por ejemplo:

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

Esto genera un campo de texto simple, pero quiero que ese campo de texto tenga la clase css de .companyName , ¿es posible directamente desde python?

Sé que puedo poner un id="companyName" directamente desde python, pero no de clase.

Ayuda.

Actualización: probé la class_="companyName" y no funcionó, obtuve:

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


Alternativamente, puede agregar la clase en su plantilla de esta manera para jinja2:

{{ form.name(size=20, class_=''input-small'') }}


En tu plantilla, pruébalo.

{{ form.companyName( **{''class'': ''companyName''} ) }}


Use render_kw si usa WTForms> = 2.1 :

submit = SubmitField(u''Block Submit Buttom'', render_kw={"class": "btn btn-primary btn-block"})


WTForms no le permite establecer opciones de visualización (como el nombre de la clase) en la inicialización del campo. Sin embargo, hay varias maneras de evitar esto:

  1. Si todos sus campos deben incluir un nombre de clase y una ID, simplemente pase el nombre short_name cada campo cuando lo represente:

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

  2. Cree una combinación de widgets personalizados que proporcione el nombre de la clase:

    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)