Передать произвольные данные из объекта FlaskForm в шаблон - PullRequest
0 голосов
/ 26 февраля 2019

При создании небольшого веб-приложения на основе Flask я столкнулся с необходимостью передавать произвольные данные из объекта поля формы в шаблон, в котором он отображается.Тем не менее, я не могу найти способ сделать это.

Единственное место, где я могу добавить такие данные, было свойство kwargs объектов WTForms Field, но потом яКажется, у меня нет возможности получить доступ к этим свойствам из шаблона.

Если вам интересно, что я пытаюсь сделать, я пишу макрос шаблона, чтобы упростить рендеринг форм, и мне нужно пройтинекоторые дополнительные данные из Form объектов полей - в основном связанные с макетом, но которые не будут атрибутами HTML для самих полей (для этого и предназначен kwargs).

1 Ответ

0 голосов
/ 08 марта 2019

Я нашел ответ здесь , но это не ответ сам по себе, но я комментирую.

Цитата Crast :

description Аргумент ключевого слова полей WTForms может быть установлен при построении поля и не проверяется, просто копируется непосредственно в поле, и, таким образом, может быть любым значением, не просто строкой, даже пользовательским атрибутом.Если вы хотите перенести свои собственные метаданные, вы можете просто использовать это для переноса любых данных, которые вам могут понадобиться: TextField(..., description={'placeholder': foo', 'class': bar} (или даже пользовательский класс), а затем использовать этот атрибут в своем шаблоне для любых специальных метаданных, которые вы хотите.

Да, я знаю о разделении контента и представления, и цель свойства description на самом деле не предназначена для такого использования, но я нашел единственный способ передать данные обратно в шаблонгде я использую макрос для визуализации форм.

Чтобы получить доступ к переданным данным внутри description из шаблона, я сделал что-то вроде этого:

{% macro render_create_form(form, form_title, enctype=None) %}
  <h2>{{ form_title }}</h2>
  <form action="" method="post"{% if enctype %} enctype="{{ enctype }}"{% endif %}>
  {{ form.hidden_tag() }}
    {% for field in form if not field.name == 'csrf_token' %}
      {% set class_name = field.description.class %}
      {% if field.type == "StringField" or field.type == "PasswordField" or field.type == "BooleanField" or field.type == "SelectField" %}
        <div class="{{ class_name }}">{{ field.label }} {{ field }}</div>
      {% elif field.type == "NumberField" %}
        <div class="{{ class_name }}">{{ field.label }} {{ field(type='number', min=field.description.min, max=field.description.max, placeholder=field.description.placeholder) }}</div>
      {% elif field.type == "HiddenField" %}
        {{ field }}
      {% elif field.type == "SubmitField" %}
        <div class="{{ class_name }}">{{ field }}</div>
      {% endif %}
  {% endfor %}
  </form>
{% endmacro %}
...