Django模板访问带有变量的字典值

时间:2019-06-17 17:11:25

标签: django python-3.x loops django-templates

我有一个包含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_dicmy_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指出了同样的问题。

1 个答案:

答案 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