0

我正在使用带有 Nunjucks 的 Eleventy (11ty)。我有一些我正在尝试排序的 JSON 数据。Jinja 文档说您可以使用点符号按属性排序,但是当我尝试按 排序时address.city,没有任何反应:

{% for item in testData|sort(attribute="address.city") %}
  {{ item.name }}
{% endfor %}

如果我不使用点符号/按顶级字段 ( ) 进行排序,它确实name有效:

{% for item in testData|sort(attribute="name") %}
  {{ item.name }}
{% endfor %}

我的测试数据(testData.json):

[
  {
    "name": "AAA",
    "address":
    {
      "city": "A?"
    },
    "salary": 2,
    "married": true
  },
  {
    "name": "III",
    "address": {
      "city": "D?"
    },
    "salary": 1,
    "married": true
  }
]
4

1 回答 1

1

因此,正如我对问题的评论中所见,Nunjucks 目前不支持按点符号排序。

我最终所做的,为了在 Eleventy 的 Nunjucks 模板中得到我需要的东西,是在里面创建一个自定义过滤器.eleventy.js,如下所示:

eleventyConfig.addFilter("sortByCity", arr => {
  arr.sort((a, b) => (a.address.city) > (b.address.city) ? 1 : -1);
  return arr;
});

然后,在我的 Nunjucks 模板中:

{% for item in testData | sortByCity %}
  {{ item.name }}
{% endfor %}

我知道这个答案更针对 11ty,但我认为这很可能适用于其他环境以扩展 Nunjucks。希望这对将来的其他人有所帮助。关于过滤器的 Nunjucks 文档在这里

于 2020-12-28T17:19:58.807 回答