【问题标题】:Iterate two dictionaries simultaneously in template在模板中同时迭代两个字典
【发布时间】:2026-01-19 10:40:01
【问题描述】:

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

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

两个字典包含相同的键但不同的值。有什么方法可以实现吗?

【问题讨论】:

    标签: django


    【解决方案1】:

    您可以使用自定义过滤器来完成此操作。如果 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 了解另一种解决方法。

    【讨论】:

      【解决方案2】:

      在您的视图中稍微重新组织一下,您可以根据需要向模板中添加任意数量的字典,并同时通过将它们添加到字典列表中来循环,例如

      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 %}
      

      【讨论】: