0

如何在 Pebble 模板 ( http://www.mitchellbosecke.com/pebble/home ) 的 for 循环中检测列表中的最后一项?

我正在使用 Pebble 生成 JSON。我有一个需要迭代的对象列表,除了最后一个之外,我需要在每个对象之后包含一个逗号。

这是我厌倦了在 IF 语句中使用 loop.index 和 loop.length 的相关模板代码,但它不起作用(无论如何我都需要检查 loop.length -1)。

模板:

"menu": {
    "items": {
    {% for menuItem in menuItems %}
    "{{ menuItem.name }}": "{{ menuItem.value }}"{%- if loop.index < loop.length %},{% endif %}
    {%- endfor %}
    }
}

示例所需的输出:

"menu": {
    "items": {
         "item1": "Item 1",
         "item2": "Item 2
    }
}

我之前使用过 Jinja2 Python 模板引擎,它的语法类似于 Pebble。Jinja2 还有一个 index.last 属性,它是一个布尔值,可以在这样的 IF 语句中使用。我不知道 Pebble 中有什么类似的东西。

弥敦道

4

2 回答 2

3

在循环内部,Pebble 提供了几个特殊变量来帮助您:

  • loop.index:一个从零开始的索引,每次迭代都会增加。
  • loop.length:我们正在迭代的对象的大小。
  • loop.first:如果第一次迭代则为真
  • loop.last:如果最后一次迭代则为真
  • loop.revindex:从循环结束开始的迭代次数

文档在此处更新缺少变量

https://github.com/PebbleTemplates/pebble/wiki/for

于 2018-07-02T01:35:42.363 回答
1

首先,我认为您应该查看专用的 JSON 库,例如 Jackson 或 GS​​ON。它可能更适合您要做的事情。

也就是说,我遇到了同样的问题,最新版本在循环中包含属性loop.first loop.lastloop.revindex.

我在下面的测试中找到了它。

https://github.com/PebbleTemplates/pebble/blob/11dd4783d44afbeb269c9d98cf9579aad0e53394/pebble/src/test/java/com/mitchellbosecke/pebble/CoreTagsTest.java#L177

于 2018-06-26T17:14:38.337 回答