Python Django 中的 for 循环返回字典中的随机值

Python for loop in Django returning random value in dictionary

我有一个 Wagtail 页面,其中显示了路由 link 块,我正在向路由 link 模型添加一个图标,以便在主页上的块中显示标题。在主页上,我得到了图标的上传文件字段的上下文,如下所示:

def get_context(self, request):
   context = super().get_context(request)
   routing_links_queryset = self.routing_links
   for link in routing_links_queryset:            
      i_link = link.link_icon
      if i_link:
           try:
              with i_link.icon.open() as file_obj:
                  data = file_obj.read()
                  data = data.decode("utf-8")                          
                  context["iconlink_data"] = data
           except OSError:
                pass
   return context

link_icon是routing_links模型中的field,icon是Icon模型中的Filefield。现在这是返回主页上的上下文,但如果主页上有 2 个路由 link 块,它将为两者呈现相同的图标。

我是否必须在每次迭代中附加上下文?在这种情况下我究竟应该如何追加或以任何替代方式来做到这一点?

修改 get_context 以将所有图标添加到上下文 ["links"] 字典中,然后在模板中循环遍历它:

def get_context(self, request):
    context = super().get_context(request)
    routing_links_queryset = self.routing_links
    context["links"] = []
    for link in routing_links_queryset: 
        link_dict = {"link_obj": link}
        i_link = link.link_icon
        if i_link:
            try:
                with i_link.icon.open() as file_obj:
                    data = file_obj.read()
                    data = data.decode("utf-8")                          
                    link_dict["iconlink_data"] = data
        context["links"].append(link_dict)
            except OSError:
                pass
    return context

在 Django 模板中它看起来像:

{% for link_dict in links %}
   {{ link_dict.link_obj }}
   {{ link_dict.link_obj.link_field }}
   <svg height="35" width="35" style="display: inline">{{ link_dict.iconlink_data|safe }}</svg>
{% endfor %}

(添加为格式化答案)