Django:如何迭代模板中的两个列表

时间:2015-07-17 12:37:36

标签: python django

从views.py发送到模板2数组:

  1. animal:['cat','dog','mause']
  2. how_many:['one','two','three']
  3. 模板:

    {% for value in animal %}
        animal:{{ value }}  \ how meny  {{ how_many[(forloop.counter0)]  }}
    {% endfor %} 
    

    在for循环中,我想读取一个迭代,然后在第二个数组中使用它,但我不能让它工作。我是初学者。

3 个答案:

答案 0 :(得分:6)

根据文档you can't do that straightforward

  

请注意,{{foo.bar}}之类的模板表达式中的“bar”将被解释为文字字符串,如果模板上下文中存在变量“bar”,则不会使用变量“bar”的值。

我建议您将zip(animal, how_many)添加到模板的上下文中:

context['animals_data'] = zip(animal, how_many)

然后你可以访问这两个列表:

{% for animal, how_many in animals_data %}
    {{ animal }} {{ how_many }}
{% endfor %}

答案 1 :(得分:1)

我建议为此问题编写自己的模板标记。将以下内容(来自this SO question)放入名为index的模板中,该模板应保存在templatetags/index.py中:

from django import template
register = template.Library()

@register.filter
def index(List, i):
    return List[int(i)]

现在,加载它并使用它应该很简单:

{% load index %}
{% for value in animal %}
  animal:{{ value }}  \ how meny {{ how_meny|index:forloop.counter0 }}
{% endfor %}

答案 2 :(得分:1)

试试这个:

animal = ['cat','dog','mause']
how_many = ['one','two','three']
data = zip(animal,how_many)
return render_to_response('your template', {'data': data})

在模板中

{% for i,j in data %}
{{i}}   {{j}}
{% endfor %}