我通过我的python文件将3个列表传递给我的jinja模板。
list1 = [1,2,3,4]
list2 = ['a','b','c','d']
list3 = [5,6,7,8]
所有这些值都是相互对应的,所以1匹配'a',5匹配'b'和6等等。
在我的模板中,我将它们打印在同一行上。 如何进行数字索引打印出来? 就这样
1 a 5
2 b 6
3 c 7
我唯一知道的是通过循环直接访问对象,如
{%for item in list%}
{{item}}
答案 0 :(得分:18)
如果你真的想要索引,你可以循环其中一个变量然后使用Jinja的loop.index0
特性(返回从0开始的循环的当前索引(loop.index
做同样的事情,从1)开始
例如:
{% for item in list1 %}
{{ item }}
{{ list2[loop.index0] }}
{{ list3[loop.index0] }}
{% endfor %}
这假设您的列表在设置模板之前都被声明为相同的长度,或者您将遇到问题。
答案 1 :(得分:8)
两种方式:
在您的代码中,只需zip
您的列表即可调用Jinja:
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>
作为替代方案,如果您只想使用Jinja,可以使用特殊的loop
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>
答案 2 :(得分:1)
与@Sean Vieira的答案类似,您可以压缩代码中的数据,然后在模板中对其进行索引。例如:
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>
答案 3 :(得分:1)
不是直接而是间接你可以做列表索引
首先将您的列表转换为字符串,然后传入您的 jinja 模板
在 jinja 模板中,第二次通过拆分将该字符串拆分为集合(类似于列表中的列表)。
然后您可以像在 Python 列表中一样进行简单的索引。
{% set list1 = variable1.split(',') %}
The grass is {{ list1[0] }} and the boat is {{ list1[1] }}
或
{% set list1 = variable1.split(',') %}
{% for item in list1 %}
<p>{{ item }}<p/>
{% endfor %}
或
{% set item1, item2 = variable1.split(',') %}
The grass is {{ item1 }} and the boat is {{ item2 }}