【问题标题】:Django Template Access a dictionary values with variableDjango模板使用变量访问字典值
【发布时间】:2019-06-17 17:11:25
【问题描述】:

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

【问题讨论】:

  • 首先,您的my_dic dict 有一些语法错误。是错字吗?
  • 尝试遍历字典——更不用说你使用变量键访问的嵌套字典了——在模板中使用 Django 有点痛苦。这不是您问题的答案,但我强烈建议您考虑在您的视图中执行此类逻辑,然后将处理后的列表传递给您的模板,以便更简单、更快速地处理。
  • 除此之外,您不能创建/拥有具有相同键的字典 (data)
  • 这是 dic 中的一个类型,我修复了它
  • @JPJ - 数据存在于数据下的字典中。那里只有一个数据键。

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


【解决方案1】:

问题是,当您尝试访问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

【讨论】:

  • @Vishuks 我刚刚找到了一个类似的答案,我认为它会起作用。我要把它放在我的views.py中吗?
  • 是的。你可以把它放在你的视图中,或者创建一个单独的文件来保存自定义过滤器。任何事情都会起作用:)
猜你喜欢
  • 2014-02-01
  • 2014-10-05
  • 2011-01-05
  • 2014-02-08
  • 2016-02-29
  • 2011-12-21
相关资源
最近更新 更多