Django模板按索引获取字典列表中的元素

时间:2018-02-26 15:54:34

标签: python django django-templates

我有以下内容:

item0 = [{'itemCode': 'AZ001', 'price': 15.52}, {'itemCode': 'AB01', 'price': 31.2}, {'itemCode': 'AP01', 'price': 1.2}]
item1 = [{'itemCode': 'BZ001', 'price': 12.55}, {'itemCode': 'BB01', 'price': 34.1}]

在django模板中,我想按索引显示每个列表元素的价格:15.52,12.55然后是31.2,34.1然后是1.2

列表大小可能不相等,所以我发送的是最大列表的大小。

迭代最大列表大小:

{{i.item|index:forloop.counter0}}让我{'itemCode': 'AZ001', 'price': 15.52}

如果我想要价格,我该怎么办?

执行{{i.item|index:forloop.counter0.price}}会在索引0处给我无效的关键价格。

换句话说,我按列顺序发送元素,并希望按行顺序显示它们,而不使用服务器上的zip进行列表理解。

任何解决方案?

2 个答案:

答案 0 :(得分:1)

不确定我的问题是否正确,但这是您要求的代码。

views.py

def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['item'] = [{'itemCode': 'AZ001', 'price': 15.52}, {'itemCode': 'AB01', 'price': 31.2}]
        return context

template.html

{{ item.0.price }}

结果为15.52

如果你想循环它,你可以这样做:

{% for i in item %}
    {{ i.price }}
{% endfor %}

在您更新问题后,我会执行以下操作:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    item0 = [{'itemCode': 'AZ001', 'price': 15.52}, {'itemCode': 'AB01', 'price': 31.2}, {'itemCode': 'AP01', 'price': 1.2}]
    item1 = [{'itemCode': 'BZ001', 'price': 12.55}, {'itemCode': 'BB01', 'price': 34.1}]
    import itertools
    context['zip_longest'] = itertools.zip_longest(item0, item1)
    return context

template.html

{% for element in zip_longest %}
    {% for item in element %}
        {% if item %}
            {{ item.price }} <br>
        {% endif %}
    {% endfor %}
{% endfor %}

结果:

15.52 
12.55 
31.2 
34.1 
1.2 

在我看来,使用zip_longest并没有错,因为它会从生成器中产生值。

答案 1 :(得分:0)

<ul>
     {% for key, value in dictionary.items %}
     <li><a href="{{key}}">{{value}}</a></li>
     {% endfor %}
</ul>

尝试使用此reference