我有一个包含IP地址的列表。我也有一个嵌套的字典,使用这些地址作为键。例如:
my_list = ['1.2.3.4', '8.8.8.8']
my_dic = {'data': {'1.2.3.4': 'My First Data', '8.8.8.8': 'My Second Data'}}
在我的模板中,我试图这样做:
for each in my_list:
print(my_dic['data'][each])
一切正常,直到我按下那个each
键。因此,如果我只打印my_dic
或my_dic[data]
,它们都将正常工作。但是,当我添加each
索引时,网页上什么也没显示
我已经独立打印了each
,所以我知道它可以正常工作。
当我在IDE中运行循环时,这也可以按预期工作,因此我知道逻辑是正确的。
在Django中,我的代码如下:
{% if my_dic.data %}
{% for each in my_list %}
<p>{{ my_dic.data.each }}</p>
{% endfor %}
{% endif %}
我是Django的新手,所以不确定我是否忽略了一些愚蠢的事情。有人知道我在这里想念的吗?
编辑 发现了一个重复的HERE,涉及我的问题。 Vishnu Ks指出了同样的问题。
答案 0 :(得分:0)
问题在于,当您尝试访问data.each
时,Django将查找data [“ each”]而不是data [each]。由于my_dic中没有名为“ each”的键,因此不会打印任何内容。
如果要访问模板内的data [each]值,则需要编写自定义模板过滤器。
from django.template.defaulttags import register
@register.filter
def get_item(dictionary, key):
return dictionary.get(key)
然后将Django模板代码更改为此。
{% if my_dic.data %}
{% for each in my_list %}
<p>{{ my_dic.data|get_item:each }}</p>
{% endfor %}
{% endif %}
有关更多详细信息,请参见Django template how to look up a dictionary value with a variable。