рендеринг атрибутов заголовка html с описанием поля Flask-WTForms

Я использую макрос render_field, представленный на странице документации Flask-WFT, для отображения полей в длинные формы в разных шаблонах.

Поле определяется так

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

Макрос выглядит так ...

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

В самих формах отдельные поля размещаются с помощью ...

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

Я не могу понять, как использовать описание в объекте поля в той части макроса, которая создает поле HTML field(**kwargs). Я знаю, что могу передавать ключевые слова в функцию render_field, но я имею дело с формами с более чем 100 полями и устанавливаю описание в forms.py, а затем снова устанавливаю его в качестве ключевого слова заголовка в template.html, кажется ненужным повторным заполнением. Я действительно хотел бы использовать макрос для отображения описания в виде заголовка, если он есть, или просто отображать поле без заголовка, если его нет.

Есть ли способ добавить новые записи в kwargs перед запуском функции field ()?


person dnfehren    schedule 16.08.2012    source источник


Ответы (1)


Так что это было намного проще, чем я думал ...

{% 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 %}
person dnfehren    schedule 16.08.2012
comment
О боже ... Я не понимал, что field () внутри шаблона отличается от класса Field внутри вашего forms.py. Другими словами, я могу добавить какой-нибудь атрибут, например dataforajax (field (dataforajax = 'test')), и он поместит его в HTML. Однако у меня возникли проблемы с добавлением «data-for-ajax», возможно, мне придется внести некоторые изменения в атрибуты javascript, чтобы разместить тире ----. - person Dexter; 12.11.2014