在Django模板中遍历两个列表
我想在Django模板中进行下面的列表循环:
foo = ['foo', 'bar'];
moo = ['moo', 'loo'];
for (a, b) in zip(foo, moo):
print a, b
Django代码:
{% for a, b in zip(foo, moo) %}
{{ a }}
{{ b }}
{% endfor %}
当我尝试这样做时,出现了以下错误:
File "/base/python_lib/versions/third_party/django-0.96/django/template/defaulttags.py", line 538, in do_for
raise TemplateSyntaxError, "'for' statements should have either four or five words: %s" % token.contents
我该如何实现这个呢?
8 个回答
61
简单来说,可以把zip定义为一个模板过滤器:
@register.filter(name='zip')
def zip_lists(a, b):
return zip(a, b)
然后,在你的模板中:
{%for a, b in first_list|zip:second_list %}
{{a}}
{{b}}
{%endfor%}
111
你可以在你的视图里使用 zip
:
mylist = zip(list1, list2)
context = {
'mylist': mylist,
}
return render(request, 'template.html', context)
然后在你的模板里使用
{% for item1, item2 in mylist %}
来同时遍历两个列表。
这个方法在所有版本的Django中都可以使用。
28
这是可以做到的
{% for ab in mylist %}
{{ab.0}}
{{ab.1}}
{% endfor %}
但是你不能在 for
循环里面直接调用 zip
。你需要先把合并后的列表存储在另一个变量里,然后再去遍历它。