2012-08-16 11 views
5

Używam makra render_field przedstawionego na Flask-WFT documentation page do renderowania pól w długich formularzach na różnych szablonach.renderowanie atrybutów tytułów html z opisem pola Flask-WTForms

Pole definiuje się ten

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

Makro wygląda tak ...

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

W formularzach siebie poszczególne pola są wprowadzane za pomocą ...

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

Czego nie mogę zrozumieć to sposób na użycie opisu w obiekcie pola w części makra przy tworzeniu pola HTML field(**kwargs). Wiem, że mogę przekazywać słowa kluczowe do funkcji render_field, ale mam do czynienia z formularzami zawierającymi ponad 100 pól i ustawieniem opisu w pliku forms.py, a następnie ustawienie go ponownie jako słowo kluczowe title w template.html wydaje się niepotrzebne. Bardzo chciałbym użyć tego makra, aby wyświetlić opis jako tytuł, jeśli tam jest, lub po prostu wyświetlać pole bez tytułu, jeśli nie jest.

Czy istnieje sposób dodawania nowych wpisów do kwargs przed uruchomieniem funkcji field()?

Odpowiedz

8

Tak było o wiele łatwiejsze niż myślałem ...

{% 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 my ... Nie wiedziałam, że to pole() wewnątrz matrycy jest inna niż klasy pola wewnątrz swojej forms.py. Innymi słowy, mogę dodać atrybut "dataforajax" (field (dataforajax = 'test')) i umieszcza go w html. Jednak mam problem z dodaniem "danych-do-ajax", być może będę musiał dokonać edycji JavaScript atrybutów, aby umieścić kreski ----. – Dexter

Powiązane problemy