Я нашел ответ здесь , но это не ответ сам по себе, но я комментирую.
Цитата 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 %}