【发布时间】:2026-01-19 10:40:01
【问题描述】:
我正在尝试在模板中同时打印两个 dicts 的值,例如:
<td>key</td><td>value from dict1</td><td>value from dict2</td>
两个字典包含相同的键但不同的值。有什么方法可以实现吗?
【问题讨论】:
标签: django
我正在尝试在模板中同时打印两个 dicts 的值,例如:
<td>key</td><td>value from dict1</td><td>value from dict2</td>
两个字典包含相同的键但不同的值。有什么方法可以实现吗?
【问题讨论】:
标签: django
您可以使用自定义过滤器来完成此操作。如果 key 相同,首先定义一个自定义过滤器,如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 了解另一种解决方法。
【讨论】:
在您的视图中稍微重新组织一下,您可以根据需要向模板中添加任意数量的字典,并同时通过将它们添加到字典列表中来循环,例如
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 %}
【讨论】: