使用Bootstrap渲染SelectFields的WTF FieldList

时间:2019-06-09 12:02:57

标签: python flask flask-wtforms flask-bootstrap

我想用flask_wtf渲染一个bootstrap/wtf.html表单。 该表单包含常规SelectFieldFieldList的SelectFields。 使用功能wtf.form_field可以渲染单个SelectField。 但是,将相同的函数应用于FieldList的每个SelectField会引发错误:

  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 :(得分:0)

我找到了错误源。 在我的脚本中,我通过

动态分配了FormEntry的选择字段的标签
selectfield.label = "some_string"

但是,SelectField的标签不是字符串,而是包含字符串变量text的对象。将上面的代码行替换为

selectfield.label.text = "some_string"

工作完成了。