我有以下内容:
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进行列表理解。
任何解决方案?
答案 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