在Django模板中遍历两个列表

65 投票
8 回答
70600 浏览
提问于 2025-04-15 20:14

我想在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。你需要先把合并后的列表存储在另一个变量里,然后再去遍历它。

撰写回答