我有以下型号:
items: {
someId1:
{
property1....
},
someId2: {...},
someIdN: {...}
}
我想在我的模板(nunjucks)中获得一个
for
循环,它遍历所有“someId”。
有人知道怎么做吗?普通的 for 循环不起作用,因为它不是数组,而且因为我在另一个模板中使用“someId..”作为引用,所以我无法将其放入数组中。
任何帮助都会很棒。
这个答案实际上就在 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
循环。
您可以像这样使用嵌套循环:
<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: {...}
}
我认为你正在寻找的答案是使用这样的东西:
{% 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
,但之前的答案可能同样有效。