【问题标题】:Accessing nested dictionary using Jinja2 templating使用 Jinja2 模板访问嵌套字典
【发布时间】:2016-07-18 17:47:08
【问题描述】:

所以我有这个字典列表:

mylist = [{'Score': 33, u'interfaces': [{u'ip_addresses': [{u'value': u'172.16.153.71', }]}]}]

我想使用 jinja2 访问“值”键。

但是,我似乎无法获得适合它的语法。我知道它可能会在彼此内部有三个 for 循环,但我做错了。

我可以在 python 中这样做:

for i in mylist:
  for x in i['interfaces']:
    for y in x['ip_addresses']:
      print y["value"]

所以也许是这样的?:

            {% for obj in mylist %}
              {%for obj2 in obj %}
                {for obj3 in obj2 %}
                    {{ obj3.value }}",
                {% endfor % }
              {% endfor % }
            {% endfor % }

但这显然不起作用。任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 你怎么称呼模板?您的变量名为 mylist,但它不会出现在模板中的任何位置。
  • 哦,对不起,哈哈。我更改了这篇文章的名称……哎呀。我将对其进行编辑以使其更有意义。

标签: python dictionary jinja2


【解决方案1】:

让我们比较一下您的 Python 循环和 Jinja 循环。外部 Python 循环是:

for i in mylist:

而对应的Jinja循环是:

{% for obj in mylist %}

看起来不错。但是,虽然您的下一个 Python 循环看起来像:

for x in i['interfaces']:

你对应的 Jinja 循环是:

{%for obj2 in obj %}

这显然不是在做同样的事情;并且由于您已经从 Python 循环中获得了逻辑,因此不清楚为什么要进行此更改。等效循环是:

{% for obj2 in obj.interfaces %}

或者:

{% for obj2 in obj['interfaces'] %}

...与 Python 更接近,但对 Jinja 来说不那么惯用。下一个嵌套循环也有同样的问题。

如果你重写你的 JInja 循环来简单地遵循 Python 逻辑,你应该已经准备好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    相关资源
    最近更新 更多