我有一个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个路由链接块,它将为两个页面呈现相同的图标。
我是否必须在每次迭代中附加上下文?在这种情况下或在其他替代方式下,我该如何精确附加?
修改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 %}
(作为格式化的答案添加)