2012-08-16 8 views
5

Sto utilizzando la macro render_field presentata sullo Flask-WFT documentation page per eseguire il rendering di campi in forme lunghe su modelli diversi.rendering degli attributi del titolo html con descrizione campo Flask-WTForm

Un campo è definito come questo

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 si presenta così ...

{% 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 %} 

Nelle forme stessi i singoli campi vengono inseriti utilizzando ...

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

Quello che non riesco a capire è un modo di usare la descrizione nell'oggetto campo all'interno della parte della macro crea il campo HTML field(**kwargs). So che posso passare le parole chiave alla funzione render_field, ma mi occupo di moduli con più di 100 campi e l'impostazione della descrizione nel forms.py e quindi l'impostazione di nuovo come parola chiave title nel template.html sembra una rigenerazione inutile. Mi piacerebbe molto usare la macro per visualizzare una descrizione come titolo se è lì o semplicemente visualizzare il campo senza un titolo se non lo è.

C'è un modo per aggiungere nuove voci a kwargs prima dell'esecuzione della funzione field()?

risposta

8

quindi è stato molto più facile di quanto pensassi ...

{% 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 mio ... non mi rendevo conto che il campo() all'interno del modello è diverso da classe Field all'interno del vostro forms.py. In altre parole, posso aggiungere alcuni attributi come "dataforajax" (campo (dataforajax = 'test')) e lo inserisce nell'html. Tuttavia, ho difficoltà ad aggiungere "data-for-ajax", potrei dover eseguire alcune modifiche javascript degli attributi per posizionare i trattini ----. – Dexter

Problemi correlati