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 %}
(添加为格式化答案)
我有一个 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 %}
(添加为格式化答案)