使用迭代列表中的索引

时间:2014-08-11 14:42:43

标签: python django list django-templates

我试图根据当前正在另一个列表上迭代的索引显示不同列表中的值,但无法弄清楚如何访问各个项目。

{% for row in myarray.all %}
    <tr>
    <th>{{ my_other_array_where_I_cant_access_elements.forloop.counter }}</th>
    <td>{{ row }}</td>
    </tr>
{% endfor %}

正如您所看到的,我尝试使用forloop.counter,但这并没有显示任何内容,只是创建了一个空的表头元素。

我的其他数组在视图中定义如下,如果我删除forloop.counter,那么我能够看到整个数组打印到表头

 my_other_array_where_I_cant_access_elements = ["X", "Y", "Z", "XX", "YY"]

如果我错过了任何必要的细节,请告诉我。

2 个答案:

答案 0 :(得分:4)

听起来你想同时迭代两个列表,换句话说就是zip()列表。

如果是这种情况,最好在视图中执行此操作并在上下文中传递:

headers = ["X", "Y", "Z", "XX", "YY"]
data = zip(headers, myarray.all())
return render(request, 'template.html', {'data': data})

然后,在模板中:

{% for header, row in data %}
    <tr>
        <th>{{ header }}</th>
        <td>{{ row }}</td>
    </tr>
{% endfor %}

答案 1 :(得分:0)

有一种可能的方法,我刚试过。它只适用于你只使用第二个数组作为单个for循环的一部分,并且不使用循环索引:

arr = ["1-0", "1-1"]     # your first array
arr2 = ["2-0", "2-1"]    # your second array

class wrap(object):
    def __init__(self, ref):
        self.ref = ref
        self.idx = -1
    def next(self):
        self.idx += 1
        return self.ref[self.idx]

return render_to_response('...', { "arr": arr, "wrap": wrap(arr2) })

模板是:

{% for row in arr %}
<h1>Row {{ row }} at {{ forloop.counter }} matches {{ wrap.matching }} </h1>
{% endfor %}