如何在可迭代对象中获取第i个项目。 Django的/ Python的

时间:2018-03-18 21:20:20

标签: python django django-templates django-views

在我的Django / Python应用程序中,我将多个可迭代对象从views.py传递给index.html。 我本质上是在尝试制作一个标准的循环,你可以通过它的索引获得一个项目。一旦我遍历第一个对象,我怎样才能在同一个循环中获得另一个iterable的相应索引?

条件:所有数组的长度总是相等,但它们的长度会每天变化。


views.py

name = ['John', 'Kim', 'Tim', 'Jill']
age = ['20', '30', '52', '27']
state = ['IN', 'IL', 'CA', 'TX']
city = ['Muncie', 'Champaign', 'Fresno', 'Dallas']

def index(request):
    args = {'names': name, 'ages': age, 'states': state, 'cities': city}
    return render(request, 'index.html', args)

的index.html

{% extends 'base.html' %}
{% load staticfiles %}

{% block Data %}
    {% for name in names %}
        <p>{{ name }}</p>
        <p>{{ age.forloop.counter0 }}</p>
        <p>{{ state.forloop.counter0 }}</p>
        <p>{{ city.forloop.counter0 }}</p>
    {% endfor %}
{% endblock %}

正如你所看到的,我以为我会使用&#39; forloop.counter0&#39;作为我的索引。但它显然不会那样工作。关于如何实现这一目标的任何建议? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以zip视图中的列表并将其解压缩到模板中:

def index(request):
    data = zip(name, age, state, city)
    args = {'data': data}
    return render(request, 'index.html', args)

然后在模板中:

{% for name, age, state, city in data %}
    {{ name }}
    {{ age }}
    {{ state }}
    {{ city }}
{% endfor %}

您还可以使用具有适当属性的对象或命名元组。

答案 1 :(得分:0)

我认为你要找的是“for loop counter”。您可以使用{{forloop.counter}}索引从1开始或{{forloop.counter0}}索引从0开始。

r[0]["24h_volume_usd"]