我尝试在Django tempalte中实现forloop,每个周期迭代两个项目,这样
{% for c in cList%}
<ul class="ListTable">
<li>
{{ c1.name }}
</li>
<li>
{{ c2.name }}
</li>
</ul>
{% endfor %}
我知道我的代码不适合这样做,但无论如何我都找不到。 我真的很感激任何建议
由于
答案 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的积分