0

我正在尝试使用 nunjucks 遍历嵌套的 json 文件,为每个对象类型提供特定的布局并根据日期对所有对象进行排序。

所以就我而言,我有两个收藏活动和视频。这两个系列都将包含一系列活动和视频。

我的文件名为 /content.json,结构如下:

{
    media: {
        events: [
            {
            content_id: "1",
            content_type: "event",
            date: "01-11-2019",
            etc: "etc"
            },
            {
            content_id: "2",
            content_type: "event",
            date: "01-08-2019",
            etc: "etc"
            }
        ],
        videos: [
            {
            content_id: "3",
            content_type: "video",
            date: "01-12-2019",
            etc: "etc"
            },
            {
            content_id: "4",
            content_type: "video",
            date: "01-09-2019",
            etc: "etc"
            }
        ]
    }
}

我试图用 if/else 语句分配不同的对象,然后使用 for 循环在数组中循环,但失败了,见下文:

{% for item in content.media %}
    {% if item == events %}
        {% for item in content.media.events %}
                {% include "components/event.njk" %}
        {% endfor %}
    {% elif item ==  video %}
        {% for item in content.media.videos %}
                {% include "components/video.njk" %}
        {% endfor %}
    {% endif %}
{% endfor %}

我从来没有尝试按日期对所有内容进行排序,但我发现:

{% for item in items|sort(attribute='date')%} 

谁能指导我正确的方向?

提前致谢。

AENM

4

2 回答 2

0

艾康,

我现在明白了!!这是另一个错字,你切换了媒体和事件。(你有没有试图让我保持敏锐?!:-))但这就是 concat 不起作用的原因!所以这是最终的工作结果:

{% for item in [].concat(media.content.events, media.content.videos) | sort(attribute = 'date') %}
     {% include "components/" + item.type + ".njk" %}
{% endfor %}

只有日期的顺序不正确,但我认为这与我的网格设置有关。

谢谢你的协助......

于 2020-01-23T17:16:10.897 回答
0

此代码按元素类型(事件或视频)输出单独的提要。

{% for event in content.media.events | sort(attribute = 'date') %}
    {% include "components/event.njk" %}
{% endfor %}

{% for video in content.media.videos | sort(attribute = 'date') %}
    {% include "components/video.njk" %}
{% endfor %}

如果您需要输出混合提要,您应该将数组连接到一个并运行它(幸运的是每个元素都已经具有类型):

{% for item in [].concat(content.media.events, content.media.videos) | sort(attribute = 'date') %}
    {% include "components/" + item.content_type + ".njk" %}
{% endfor %}
于 2020-01-17T09:46:28.033 回答