Jinja2模板-循环语句

10

没有找到其他帖子中有相似问题的解决方案,我正在尝试使用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>

我尝试使用括号(), 花括号{}, 和双花括号{{}},这真的可行吗?

=>

我用了括号(), {}和{{}},这真的行吗?


这不是关于Flask的问题,因为Flask不包括模板引擎。你可能在问Jinja2? - Daniel Roseman
抱歉,是我的错,你完全正确。 - Kilrathy
@Kilrathy 那么问题出在“range”上吗?这个链接是否有帮助:https://dev59.com/Mm025IYBdhLWcg3wYFCH - Salem
1个回答

15

尝试:

<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


我尝试了两种方法,第二种方法给出了错误“TypeError: cannot concatenate 'str' and 'int' objects”。第一种方法部分工作,但是它给出了所有字段,我只想要BooleanField bri1-4...你有什么想法吗? - Kilrathy
1
抱歉,我更新了第二个示例。对于第一个示例,您可以添加自己的条件:{% if name.startswith('bri') %} - tbicr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接