WTForms - 如何在不渲染 SelectField 的情况下显示 SelectField 选择的标签

问题描述 投票:0回答:2

我有一种情况,我想仅显示表单字段的“数据”(不呈现为字段类型)。

通过使用字段的 .data 属性,这通常很简单,但我不知道如何为 SelectField 执行此操作,我想在其中显示选择的标签而不是其数据。

简单的例子:

class testform(Form)
  name = StringField()
  fruit = SelectField(choices=[('1','Lemon'),('2','Lime')])

myform = testform(name='foo', fruit='2')


#in template
{{myform.name.data}} &nbsp {{myform.fruit.data}}

这显示 foo 2 但我想显示 foo Lime

似乎没有办法引用fruit.data.label

如果我使用外部枚举,这会很容易,但在这种情况下,SelectField IS是枚举,所以我有点卡住了。

有什么想法如何获取选择的标签吗?

flask flask-wtforms wtforms
2个回答
1
投票

您可以通过将类包装在带参数的函数中来填充表单

def populate_testform(name_default_value, fruit_default_value):
    class testform(Form):
        name = StringField(default=name_default_value)
        fruit = SelectField(choices=[('1','Lemon'),('2','Lime')], default=fruit_default_value)
    return testform()


myform = populate_testform('foo', '2')

0
投票

我设法使用以下代码来做到这一点:

{% for value, label in field.choices %}
  <li data-value="{{ value }}">{{ label }}</li>
{% endfor %}

您可以将 li 标签更改为

option
标签并将其包装在
select
标签内,以重新构建 html 下拉列表。

© www.soinside.com 2019 - 2024. All rights reserved.