WTForms,带有额外“标签”的射电场

时间:2016-01-03 19:18:58

标签: python python-3.x flask jinja2 flask-wtforms

我在模板中呈现的动态生成的RadioField

class F(Form):
    pass

F.selection = RadioField(
    'selection',
    choices=options,
    validators=[
        DataRequired()
    ]
)

'options'是一个生成的元组数组,这很好用。它在我的模板

中打印时打印选项
{% for subfield in form.selection %}
<p>
<tr>
    <td>{{ subfield }}</td>
    <td>{{ subfield.label }}</td>
</tr>
</p>
{% endfor %}

我现在面临的问题是,这给了我一组单选按钮,旁边有一个文本。在这种情况下,我希望人们在之间选择的“标题”。

但我想在那里有其他信息,例如。描述,大小,图像可能等等。

我目前尝试使用此额外信息制作元组列表并将其传递给模板。我可以在那里访问额外的信息,但我无法弄清楚如何同时迭代这两组数据

{% for item in data %}
<p>
    {{ item[0] }}
    {{ item[1] }}
    {{ item[2] }}
</p>
{% endfor %}

我想要的是把它放在一个for循环中,这样我就可以制作漂亮的“增强”选项。现在我会使用zip,但我不能在Jinja2中这样做(我认为)并且我不能事先将其压缩,因为radiofield的选择参数不会采用它。

所以有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这将在后端/ Python端使用:

form = TestRadio()
form.radio.choices = [('one', '1'), ('two', '2')]
extra_stuff = [('a', 'b', 'c'), ('d', 'e', 'f')]

TestRadio继承自flask-wtf Form,如下所示:

class TestRadio(Form):
    radio = RadioField()

假设extra_stuff的长度与选择的数量相同,那么在jinja2中:

<form>
    <table>
    {% for subfield in form.radio %}
    <tr>  
        <td> {{ form.csrf_token }} </td>
        <td> {{ subfield }} </td>
        {% for item in extra_stuff[loop.index0] %}
          <td> {{ item }} </td>
        {% endfor %}
    </tr>
    {% endfor %}
    </table>
</form>

总结在Python端,在视图函数中设置选项。诀窍是我使用的loop变量。它跟踪循环外层的索引。 (http://jinja.pocoo.org/docs/dev/tricks/#accessing-the-parent-loop

关于添加图片:

http://flask.pocoo.org/docs/0.10/quickstart/#static-files