我有三个列表,我想对这些列表只使用一个for循环,因为我使用的是自定义过滤器。我不能使用zip,因为如果我的列表之一为空,那么zip将返回空列表,所以我想我必须为此使用自定义过滤器。
码
a = []
b = [{"qq":1},{"ww":2},{"ee":3}]
c = [{"rr":4}]
现在我希望我的自定义过滤器只返回这3个列表中的一个列表。
自定义过滤器:
def zip(a,b):
return a + b
在我的模板中,我使用了这个:
1)为两个名单工作
{% for x in a|zip:b %}
{% endfor %}
2)不适用于三个名单:
{% for x in a|zip:b|zip:c %}
{% endfor %}
3)如果制作两个过滤器zip1和zip2并使用它,那么它也不起作用:
{% for x in a|zip1:b|zip2:c %}
{% endfor %}
4)我还试图在一个过滤器中发送到列表,以便我可以将它们拆分并完成我的工作但是这给了我错误只能连接列表(不是“SafeText”)到列表
{% for x in a|zip1:'b,c' %}
{% endfor %}
任何帮助将不胜感激。
答案 0 :(得分:0)
a = []
b = [{"qq":1},{"ww":2},{"ee":3}]
c = [{"rr":4}]
m = max(len(a), len(b), len(c))
a = (a + [{}]*m)[:m]
b = (b + [{}]*m)[:m]
c = (c + [{}]*m)[:m]
for x, y, z in zip(a, b, c):
#do something fancy
或作为上下文变量传递
context = {
zipped_list: zip(a, b, c),
}