【问题标题】:Jinja/WTForms: Displaying a single radio buttonJinja/WTForms:显示单个单选按钮
【发布时间】:2018-06-26 23:33:41
【问题描述】:

如何在 Jinja 的 WTForms 表单中显示单个单选按钮(组外)?

基本上,我希望在网页上有一个如下所示的表单:

o 单选选项1

Various sub-options here

o 单选选项2

Some more sub-options, totally different from the first group

o 单选选项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


    【解决方案1】:

    如果您想要一个单选按钮,您可以在表单中使用 BooleanField :

    class MyForm(FlaskForm):
    
       option1 = BooleanField(u'label', ...)
    

    在你的模板中:

    {{ form.option1 }}
    

    【讨论】:

    • 谢谢。希望更多的东西仍然允许我为组中的所有按钮使用相同的 wtforms 字段(因此它们具有相同的名称并在选择一个时自动取消选择其他按钮等),但仍然给我对渲染进行更细粒度的控制。但感谢您的回应!
    猜你喜欢
    • 2021-05-12
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    相关资源
    最近更新 更多