多个列表在django模板中的并行迭代

自己接触django时间不长,刚遇到一点小问题,就是在django模板中如何并行迭代多个列表。

一开始我想到或许可以传入多个列表,然后在模板中使用forloop.counter变量的值去访问另一个列表的元素。

比如当我迭代list1和list2的时候,使用类似下面的代码:

{% for item in list1 %}

access list2 item via {{ list2.forloop.counter}}

{% endfor %}

forloop.counter是一个计数器,保存了当前的迭代计数器。然而,测试之后,发现这个方法是不可行的。

随后,我又测试了另一种方法,在模板中zip打包 list1和list2,然后通过序列解包来并行迭代。模板代码类似:

{% for item1,item2 in zip(list1, list2) %}

{{item1}} {{item2}}

{% endfor %}

不过, 这样也是不可行的。模板系统无法完成上面的工作。

那么,到底应该如何并行迭代呢?

真正可行的方法,是先在view中zip打包多个列表,然后把得到的结果作为一个模板变量传入。

像lst_objects = zip(list1, list2)这样的语句应该位于视图函数,而不是模板中。

在模板内解包lst_objects,可以通过序列解包,还可以使用索引直接访问各个元素。

方法1:

{{ for item1,item2 in lst_objects}}

{{item1}}    {{item2}}

{{endfor}}

方法2:

{{ for item in lst_objects }}

{{item.0}}    {{item.1}}

{{ endfor }}

 

参考链接:http://stackoverflow.com/questions/2415865/iterating-through-two-lists-in-django-templates

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注