在模板中同时迭代两个词典

时间:2016-04-13 12:01:18

标签: django

我正在尝试在模板中同时打印两个dicts的值,例如:

<td>key</td><td>value from dict1</td><td>value from dict2</td>

两个词组都包含相同的键但值不同。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:2)

您可以使用自定义过滤器来完成此操作。如果密钥相同,请首先按照this answer

中的说明定义自定义过滤器
from django.template.defaulttags import register
...
@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)

然后您可以在模板中执行以下操作:

{% for key, value1 in dict1.items %}
    <td>Value 1: {{ value1 }}</td>
    <td>Value 2: {{ dict2|get_item:key }}</td>
{% endfor %}

另请参阅this question了解其他解决方法。

答案 1 :(得分:0)

在视图中进行一些重新组织后,您可以根据需要向模板中添加任意数量的字典,并通过将其添加到字典列表(例如,

dict1 = {'key1':value1, 'key2':value2, 'key3': etc.}
dict2 = {'key1':value1, 'key2':value2, 'key3': etc.}

您想通过创建列表对象同时遍历模板中的两个列表。假设上面的列表来自某些数据库对象:

datas = []
for item in items:
    # create new dictionary combining values required
    data = {'name':item.name, 'rev':item.rev, 'val':item.val}
    datas.append(data)

然后将字典列表(就像对Django对象的过滤一样)发送到模板:

{% for data in datas %}
    <td>{{ data.name }}</td>
    <td>{{ data.value1 }}</td>
    <td>{{ data.value2 }}</td>
{% endfor %}