Jinja2 / Nunjucks:对for循环元素的不同处理

时间:2018-09-17 15:31:28

标签: jinja2 nunjucks templating-engine

我有一个列表:

list = [a, b, c, 1, 2, 3, a, b, c, 1, 2, 3, a, b, c, 1, 2, 3]

我想将其显示为表格,其中每个第4,第5和第6个元素均以其自己的方式进行样式设置,例如:

<td><span class="label label-info">1</span></td>
<td><span class="label label-danger">2</span></td>
<td><span class="label label-primary">3</span></td>

我将列表分成6列,将其显示为如下表:

{%- for row in list|batch(6, '&nbsp;') %}
    <tr>
    {%- for column in row %}
        <td>{{ column }}</td>
    {%- endfor %}
    </tr>
{%- endfor %}

但是我不知道如何做上面描述的事情。有人有主意吗?

2 个答案:

答案 0 :(得分:1)

您可以使用loop.index来判断循环中迭代的编号:

{%- for row in list|batch(6, '&nbsp;') %}
    <tr>
    {%- for column in row %}
        <td>
            {%- if loop.index == 4 %}<span class="label label-info">{% endif -%}
            {%- if loop.index == 5 %}<span class="label label-danger">{% endif -%}
            {%- if loop.index == 6 %}<span class="label label-primary">{% endif -%}
            {{ column }}
            {%- if loop.index in [4, 5, 6] %}</span>{% endif -%}
        </td>
    {%- endfor %}
    </tr>
{%- endfor %}

答案 1 :(得分:1)

如果不需要span包装器,则代码可以写为

{% set classes = {4: 'label label-info', 5: 'label label-danger', 6: 'label label-primary'} %}
{%- for row in list | batch(6, '&nbsp;') %}
    <tr>
    {% for column in row %}
        <td class = "{{classes[loop.index]}}">{{column}}</td>
    {% endfor %}
    </tr>
{% endfor %}

P.S。 Imho,{%--%}阻塞了代码。更好的方法是在页面生成结束时使用html beautifier。如果您使用Express,请参阅express-beautify中间件。