цикл через оператор for, используя if / else с nunjucks и json
Я пытаюсь перебрать вложенный файл json с помощью nunjucks, дать каждому типу объекта определенный макет и отсортировать все по дате.
Итак, в моем случае у меня есть две коллекции событий и видео. Обе коллекции будут содержать множество событий и видео.
Мой файл называется /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
2 ответа
Айкон,
Я понял!! Это была очередная опечатка, вы поменяли СМИ и события. (ты пытался держать меня в курсе?!:-)) Но вот почему конкат не сработал!! Итак, это окончательный рабочий результат:
{% for item in [].concat(media.content.events, media.content.videos) | sort(attribute = 'date') %}
{% include "components/" + item.type + ".njk" %}
{% endfor %}
Только дата не в правильном порядке, но я думаю, что это связано с моей настройкой сетки.
Спасибо, что помогли мне...
Этот код выводит каналы, разделенные по типу элементов (событие или видео).
{% 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 %}