循环对象属性nunjucks

问题描述 投票:0回答:3

我有以下型号:

items: {
    someId1: 
        {
            property1....
        },
    someId2: {...},
    someIdN: {...}
}

我想在我的模板(nunjucks)中获得一个

for
循环,它遍历所有“someId”。 有人知道怎么做吗?普通的 for 循环不起作用,因为它不是数组,而且因为我在另一个模板中使用“someId..”作为引用,所以我无法将其放入数组中。

任何帮助都会很棒。

nunjucks
3个回答
44
投票

这个答案实际上就在 Nunjucks 主页上

<ul>
   {% for name, item in items %}
      <li>{{ name }}: {{ item }}</li>
   {% endfor %}
</ul>

在这种情况下,

name
是对象属性名称,
item
是对象属性值,所以你也可以这样想:

{% for key, value in object %}

在你的情况下,这将是:

<ul>
   {% for someId, item in items %}
      <li>{{ someId }}: {{ item.property1 }}</li>
   {% endfor %}
</ul>

您可以对数组和对象/哈希使用

for
循环


1
投票

您可以像这样使用嵌套循环:

<ul>
  {% for item in items %}
    {% for something in item.someId1 %}
      <li>
        {{ something.property1 }}
      </li>
    {% endfor %}
  {% endfor %}
</ul>

对于这个 json 对象:

items: {
  someId1: {
    property1: "It makes you want to shout! Raise your hands up and..."
  },
  someId2: {...},
  someIdN: {...}
}

0
投票

我认为你正在寻找的答案是使用这样的东西:

{% for tuple in items | dictsort %}
   <p>{{tuple[0]}}, {{tuple[1]}}</p>
{% endfor %}

非常简单,dictsort 过滤器以排序的方式从对象返回元组(键值对)列表,然后可以按如下方式访问。

所以,如果该物体是

items: {
    someId1: 
        {
            property1....
        },
    someId2: {...},
    someIdN: {...}
}

你会得到,

[['someid1',{property1: ..}], ['someid2','...'], ['someid3','...']]

现在您可以像循环数组一样使用循环。请记住,其他嵌套属性也必须手动处理。

之前的答案建议手动提取每个属性。如果我想要同一页面包含 5 个属性和 10 个属性的数据,该怎么办?如果我想要所有键而不指定它们怎么办?这是我遇到并偶然发现这个问题的。截至 2022 年,我们可以使用

dictsort
,但之前的答案可能同样有效。

© www.soinside.com 2019 - 2024. All rights reserved.