Визуализация списка полей WTF для SelectFields с помощью Bootstrap - PullRequest
0 голосов
/ 09 июня 2019

Я хотел бы визуализировать flask_wtf форму с bootstrap/wtf.html. Форма содержит обычные SelectField и FieldList полей SelectFields. Для рендеринга одного SelectField отлично работает, используя функцию wtf.form_field. Однако применение одной и той же функции к каждому SelectField из FieldList вызывает ошибку:

  File "/usr/local/lib/python3.5/dist-packages/flask_bootstrap/templates/bootstrap/wtf.html", line 119, in template
    {{field.label(class="control-label")|safe}}
TypeError: 'str' object is not callable

Моя интерпретация ошибки заключается в том, что строка "field.label" была вызвана как функция с использованием скобок. С другой стороны, похоже, что то же самое работает для одного SelectField.

Вот form.py:

from flask_wtf import FlaskForm
from wtforms import SelectField, FieldList, FormField

class FormEntry(FlaskForm):
    selectfield = SelectField('Name', coerce=int)

class MyForm(FlaskForm):
    selectfield = SelectField('Name', coerce=int, choices=[(2, "choice 2"), (1, "choice 1")])
    form_entries = FieldList(FormField(FormEntry))

А вот render.html:

 {% extends 'bootstrap/base.html' %}
 {% import 'bootstrap/wtf.html' as wtf %}

 {{ form.hidden_tag() }}
 {{ wtf.form_field(form.selectfield) }}
 {% for entry in form.form_entries %}
     {{ wtf.form_field(entry.selectfield) }}
 {% endfor %}

1 Ответ

0 голосов
/ 10 июня 2019

Я нашел источник ошибки.В моем сценарии я назначил метки полей выбора FormEntry динамически с помощью

selectfield.label = "some_string"

Однако метка SelectField является не строкой, а объектом, который содержит строковую переменную text,Замена вышеуказанной строки кода на

selectfield.label.text = "some_string"

выполнила свою работу.

...