【发布时间】:2018-06-26 23:33:41
【问题描述】:
如何在 Jinja 的 WTForms 表单中显示单个单选按钮(组外)?
基本上,我希望在网页上有一个如下所示的表单:
o 单选选项1
Various sub-options hereo 单选选项2
Some more sub-options, totally different from the first groupo 单选选项3
Yet more sub-options (again, different)[提交按钮]
...然后在运行时通过 Javascript 切换子组的呈现(这部分我已经处理好了)。
所以。我在 WTForms 中将单选按钮定义为单个 RadioField:
class MyForm(FlaskForm):
radio_opts = RadioField(
"Caption",
choices=[('1', "Radio option1"), ('2', "Radio option2"), ('3', "Radio option3")]
)
...
但是由于子选项,我不想一次只显示整个字段,而且由于子选项完全不同,循环遍历选项没有意义 à la
{% for option in form.radio_opts %}
<div>{{ option }} {{ option.label }}</div>
<div>{# now figuring out what goes in here becomes rather awkward... #}</div>
{% endfor %}
在我看来,理想的方式就是能够
<div>{{ form.radio_opts[0] }} {{ form.radio_opts[0].label }}</div>
<div>{# first set of sub-options #}</div>
<div>{{ form.radio_opts[1] }} {{ form.radio_opts[1].label }}</div>
<div>{# second set of sub-options #}</div>
<div>{{ form.radio_opts[2] }} {{ form.radio_opts[2].label }}</div>
<div>{# third set of sub-options #}</div>
但是像这样下标form.radio_opts会产生错误...RadioField object has no element 0
好的,是吗?我试过投射到一个列表/元组,我试过使用next()——Jinja 不会有。
也欢迎对获得上述表格的替代方法提出想法!
更新
所以这就是我最终解决它的方式。我一点也不喜欢它——有 got 是一种更好的方法。但这暂时可以解决问题...
{% set opts = namespace(opt1=None, opt2=None, opt3=None) %}
{% for option in form.radio_opts %}
{% if loop.index == 1 %}
{% set opts.opt1 = option %}
{% elif loop.index == 2 %}
{% set opts.opt2 = option %}
{% elif loop.index == 3 %}
{% set opts.opt3 = option %}
{% endif %}
{% endfor %}
【问题讨论】:
标签: python flask iterator jinja2 wtforms