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

问题描述 投票:0回答:1

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

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模型中的字段,而icon是Icon模型中的Filefield。现在,这将返回主页上的上下文,但是如果主页上有2个路由链接块,它将为两个页面呈现相同的图标。

我是否必须在每次迭代中附加上下文?在这种情况下或在其他替代方式下,我该如何精确附加?

python django list dictionary wagtail
1个回答
0
投票

修改get_context以将所有图标添加到上下文[“链接”] dict,然后在模板中循环遍历它:

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": 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 in links %}
   {{ link.link.link_field }}
   <svg height="35" width="35" style="display: inline">{{ link.iconlink_data|safe }}</svg>
{% endfor %}

(作为格式化的答案添加)

© www.soinside.com 2019 - 2024. All rights reserved.