代码之家  ›  专栏  ›  技术社区  ›  sunwarr10r

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

  •  1
  • sunwarr10r  · 技术社区  · 8 年前

    我有一个清单:

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

    <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 回复  |  直到 8 年前
        1
  •  1
  •   blhsing    8 年前

    你可以用 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 %}
    
        2
  •  1
  •   Aikon Mogwai    8 年前

    如果你不需要 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.伊姆霍, {%- 和 -%} 塞住密码。更好的方法是在页面生成结束时使用html美化器。如果你使用 Express ,参见 express-beautify

    推荐文章