Django模板循环迭代两个项目

时间:2011-09-24 00:17:54

标签: django templates for-loop

我尝试在Django tempalte中实现forloop,每个周期迭代两个项目,这样

{% for c in cList%}
<ul class="ListTable">
    <li>
         {{ c1.name }}
    </li>
    <li>
         {{ c2.name }}
    </li>

</ul>
{% endfor %}

我知道我的代码不适合这样做,但无论如何我都找不到。 我真的很感激任何建议

由于

3 个答案:

答案 0 :(得分:6)

如果你可以控制cList的列表结构,为什么不把它作为2个元素的元组列表或2个元素的列表列表,比如

#in the view
cList = [(ob1, ob2), 
         (ob3, ob4)]

和模板中的

{% for c1, c2 in cList %}

 <ul class="ListTable">
   <li>
     {{ c1.name }}
   </li>
   <li>
      {{ c2.name }}
   </li>
</ul>
 {% endfor %}

此外,您可以使用zip函数来促进cList的创建,或者定义一个 从对象列表中创建这种结构的函数,如

def pack(_list):
    new_list = zip(_list[::2], _list[1::2])
    if len(_list) % 2:
        new_list.append((_list[-1], None))
    return new_list

答案 1 :(得分:1)

一种选择是使用内置模板标记cycle

并执行以下操作:

<div *ngIf="isLoading?.enabled && isLoading?.step == 'step2'" class="loader" align="center">
  <img src="images/loading-bars.svg" alt="" />
</div>

注意:如果列表中有奇数个元素,那么最后一个表只有一个带有此选项的元素,我们正在检查{% for c in c_list %} {% cycle True False as row silent %} {% if row %} <ul class="ListTable"> {% endif %} <li> {{ c.name }} </li> {% if not row or forloop.last %} </ul> {% endif %} {% endfor %}

答案 2 :(得分:0)

我试图实施有效的cyraxjoe解决方案,但只有一个问题...

a = [1,2,3]将返回[(1,2)]但会删除3。

所以我在irc freenode #python中寻求解决方案,我得到了这个:

it = iter(a); nested = [list(b) for b in itertools.izip_longest(it, it)]
print nested
[[1, 2], [3, None]]

我还被告知要查找itertools模块的文档,并搜索“石斑鱼”配方。它做了类似的事情,但我还没有尝试过。

我希望这会有所帮助:)

*从#pypass频道

除以及lvh的积分