【问题标题】:Jinja2 Template - for loopJinja2 模板 - for 循环
【发布时间】:2013-05-22 08:55:35
【问题描述】:

没有找到另一个有类似问题的帖子,我正在尝试使用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 吗?
  • 对不起,你说得对。
  • @Kilrathy 所以问题出在“范围”上? this 有帮助吗?

标签: python templates jinja2


【解决方案1】:

试试:

<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:无法连接'str'和'int'对象”。第一个部分有效,但它给了我所有的领域,我只想要 BooleanField bri1-4 ......有什么想法吗?
  • 抱歉,我更新了第二个示例。首先,您可以添加自己的条件:{% if name.startswith('bri') %}.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多