Jinja2模板 - for循环

时间:2013-05-22 08:55:35

标签: python templates jinja2

没有找到另一个有类似问题的帖子,我正在尝试使用flask和wtforms生成一些复选框,目前我已经得到了这段代码:

<div class="control-group">
    <p><strong>Check the enabled BRI Ports</strong></p>
    <label class="checkbox inline">
        {{ form.bri1(value=1) }} {{ form.bri1.label }}
    </label>
    <label class="checkbox inline">
        {{ form.bri2(value=1) }} {{ form.bri2.label }}
    </label>
    <label class="checkbox inline">
        {{ form.bri3(value=1) }} {{ form.bri3.label }}
    </label>
    <label class="checkbox inline">
        {{ form.bri4(value=1) }} {{ form.bri4.label }}
    </label>
</div>

到目前为止,这是有效的,但现在我尝试使用简单的for循环来执行此操作:

<div class="control-group">
    <p><strong>Check the enabled BRI Ports</strong></p>
    {% for n in range(1,6) %}
    <label class="checkbox inline">
        {{ form.brin.label }}
    {% endfor %}
</div>

我尝试过使用(),{}和{{}} ......这有可能吗?

1 个答案:

答案 0 :(得分:13)

尝试:

<div class="control-group">
    <p><strong>Check the enabled BRI Ports</strong></p>
    {% for name, field in form._fields.items() %}
        {% if name != 'csrf_token' %}
            <label class="checkbox inline">
                {{ field(value=1) }} {{ field.label }}
            </label>
        {% endif %}
    {% endfor %}
</div>

您可以设置排序form._fields.items()或条件而不是{% if name != 'csrf_token' %}。或者:

<div class="control-group">
    <p><strong>Check the enabled BRI Ports</strong></p>
    {% for n in range(1,6) %}
        {% if form['bri' + n|string] %}
            <label class="checkbox inline">
                {{ form['bri' + n|string](value=1) }} {{ form['bri' + n|string].label }}
            </label>
        {% endif %}
    {% endfor %}
</div>

您还可以使用n.__str__()代替过滤n|string