2012-08-16 8 views
5

Ich benutze das render_field Makro auf der Flask-WFT documentation page präsentiert, um Felder in langen Formen über verschiedene Vorlagen zu rendern.Rendern HTML Titel Attribute mit Flask-WTForms Feld Beschreibung

ist ein Feld, wie dieses

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")]) 

Das Makro sieht wie folgt aus ... definiert

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

In den Formen sich die einzelnen Felder platziert mit ...

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

Was ich nicht herausfinden kann, ist eine Möglichkeit, die Beschreibung im Feldobjekt innerhalb des Teils des Makros zu verwenden at erstellt das HTML-Feld field(**kwargs). Ich weiß, dass ich Schlüsselwörter an die render_field-Funktion übergeben kann, aber ich habe es mit Formularen mit mehr als 100 Feldern zu tun und setze die Beschreibung in forms.py und setze sie dann erneut als title-Schlüsselwort in der template.html, scheint unnötige Auffüllung zu sein. Ich würde wirklich gerne das Makro verwenden, um eine Beschreibung als Titel anzuzeigen, wenn es da ist oder nur das Feld ohne Titel anzeigen, wenn es nicht ist.

Gibt es eine Möglichkeit, neue Einträge zu kwargs hinzuzufügen, bevor die Funktion field() ausgeführt wird?

Antwort

8

So war es viel einfacher, als ich dachte ...

{% 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 meine ... Ich wusste nicht, das Feld() innerhalb Vorlage als Field-Klasse in Ihrem forms.py unterscheidet. Mit anderen Worten, ich kann ein Attribut wie 'dataforajax' (field (dataforajax = 'test')) hinzufügen und es in den HTML-Code einfügen. Allerdings habe ich Probleme beim Hinzufügen von "Data-for-Ajax", ich muss vielleicht einige Javascript-Bearbeitung der Attribute vornehmen, um die Bindestriche zu setzen ----. – Dexter

Verwandte Themen