如何索引jinja模板?

2024-05-27 11:17:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我将通过python文件向jinja模板传递3个列表。

list1 = [1,2,3,4]
list2 = ['a','b','c','d']
list3 = [5,6,7,8]

所有这些值都对应,因此1与“a”和5匹配,2与“b”和6匹配,等等

在我的模板中,我将它们打印在同一行上。 如何进行数字索引以打印出来? 如此

1 a 5
2 b 6
3 c 7

我只知道通过循环直接访问对象

 {%for item in list%}
    {{item}}

Tags: 文件对象in模板列表for数字item
3条回答

如果您真的需要索引,可以只循环一个变量,然后使用Jinja的loop.index0功能(返回从0开始的循环的当前索引(loop.index执行相同的操作,从1开始)

例如:

{% for item in list1 %}

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

{% endfor %}

这假设在设置模板之前,您的列表都被断言为相同的长度,否则您将遇到问题。

类似于@Sean Vieira answer,您可以压缩代码中的数据,然后将其索引到模板中。例如:

data = zip(list1, list2, list3)

<table>
<tr>
       <td>list 1 value</td>
       <td>list 2 value</td>
       <td>list 3 value</td>        
<tr>
{% for row in data %}
<tr>
       <td>{{ row[0] }}</td>
       <td>{{ row[1] }}</td>
       <td>{{ row[2] }}</td>
</tr>
{% endfor %}
</table>

两种方式:

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

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

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

    {# your_template.jinja #}
    <table>
    {% for row in data %}
        <tr>
        {% for cell in row %}
            <td>{{ cell }}</td>
        {% endfor %}
        </tr>
    {% endfor %}
    </table>
    
  2. 作为替代,如果您只想使用Jinja,可以使用特殊的^{} variable

    <table>
    {% for cell in list1 %}
        <tr>
            <td>{{ list1[loop.index0] }}</td>
            <td>{{ list2[loop.index0] }}</td>
            <td>{{ list3[loop.index0] }}</td>
        </tr>
    {% endfor %}
    </table>
    

相关问题 更多 >

    热门问题