2012-08-16 16 views
5

Estoy usando la macro render_field presentada en el Flask-WFT documentation page para representar campos en formas largas en diferentes plantillas.representación de atributos de título html con descripción de campo Flask-WTForms

Un campo se define como esto

year_built = IntegerField(label='Year Built', 
      description='Year built, not the year of a major renovation.', 
      validators=[validators.NumberRange(
            min=1700, 
            max=2012, 
            message="Between %(min)s and %(max)s")]) 

La macro se parece a esto ...

{% macro render_field(field) %} 
    <dt>{{ field.label }} 
    <dd>{{ field(**kwargs)|safe }} 
    {% if field.errors %} 
    <ul class=errors> 
    {% for error in field.errors %} 
     <li>{{ error }}</li> 
    {% endfor %} 
    </ul> 
    {% endif %} 
    </dd> 
{% endmacro %} 

En las formas propias de los campos individuales se colocan usando ...

{{ render_field(form.year_built, class="input text")}} 

Lo que no puedo entender es una forma de usar la descripción en el objeto de campo dentro de la parte de la macro at crea el campo HTML field(**kwargs). Sé que puedo pasar palabras clave a la función render_field, pero estoy tratando con formularios con más de 100 campos y estableciendo la descripción en forms.py y luego configurándola de nuevo como una palabra clave title en template.html parece una repleción innecesaria. Realmente me gustaría usar la macro para mostrar una descripción como un título si está allí o simplemente mostrar el campo sin un título si no es así.

¿Hay alguna manera de agregar nuevas entradas al kwargs antes de ejecutar la función de campo()?

Respuesta

8

así que era mucho más fácil de lo que pensaba ...

{% macro render_field(field) %} 
    <dt>{{ field.label }} 
    <dd>{{ field(title=field.description, **kwargs)|safe }} 
    {% if field.errors %} 
    <ul class=errors> 
    {% for error in field.errors %} 
     <li>{{ error }}</li> 
    {% endfor %} 
    </ul> 
    {% endif %} 
    </dd> 
{% endmacro %} 
+0

Oh mi ... no me di cuenta que el campo() dentro de la plantilla es diferente de la clase dentro de su campo forms.py. En otras palabras, puedo agregar algún atributo como 'dataforajax' (campo (dataforajax = 'prueba')) y lo coloca en el html. Sin embargo, tengo problemas para agregar 'data-for-ajax', es posible que tenga que hacer alguna edición de JavaScript de los atributos para colocar los guiones ----. – Dexter

Cuestiones relacionadas