你如何索引jinja模板?

use*_*173 18 python jinja2

我通过我的python文件将3个列表传递给我的jinja模板.

list1 = [1,2,3,4]
list2 = ['a','b','c','d']
list3 = [5,6,7,8]
Run Code Online (Sandbox Code Playgroud)

所有这些值都是相互对应的,因此1匹配'a'和5,2与'b'和6匹配等.

在我的模板中,我将它们打印在同一行上.如何进行数字索引打印出来?就是这样

1 a 5
2 b 6
3 c 7
Run Code Online (Sandbox Code Playgroud)

我唯一知道的是通过循环直接访问对象

 {%for item in list%}
    {{item}}
Run Code Online (Sandbox Code Playgroud)

Que*_*lan 22

如果你真的想要索引,你可以循环其中一个变量,然后使用Jinja的loop.index0功能(返回从0开始的循环的当前索引(loop.index同样的事情,从1开始)

例如:

{% for item in list1 %}

    {{ item }}
    {{ list2[loop.index0] }}
    {{ list3[loop.index0] }}

{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这假设您的列表在设置模板之前都被声明为相同的长度,或者您将遇到问题.


Sea*_*ira 8

两种方式:

  1. 在您的代码中只调用Jinja zip的列表:

    data = zip(list1, list2, list3)
    # data is now a list of tuples
    # [(1, 'a', 5), (2, 'b', 6), etc.]
    
    Run Code Online (Sandbox Code Playgroud)

    然后,在您的模板中,您可以简单地循环嵌套行:

    {# your_template.jinja #}
    <table>
    {% for row in data %}
        <tr>
        {% for cell in row %}
            <td>{{ cell }}</td>
        {% endfor %}
        </tr>
    {% endfor %}
    </table>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 作为替代,如果您只想使用Jinja,您可以使用特殊loop变量:

    <table>
    {% for cell in list1 %}
        <tr>
            <td>{{ list1[loop.index0] }}</td>
            <td>{{ list2[loop.index0] }}</td>
            <td>{{ list3[loop.index0] }}</td>
        </tr>
    {% endfor %}
    </table>
    
    Run Code Online (Sandbox Code Playgroud)