l oop через оператор for с использованием if / else с nunjucks и json - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь l oop через вложенный json файл с nunjucks, дать каждому типу объекта конкретный c макет и отсортировать все по дате.

Так что в моем случае я есть две коллекции событий и видео. Обе коллекции будут иметь множество событий и видео.

Мой файл называется /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, а затем использовать для l oop для циклического перебора массива, но это не удалось, см. ниже:

{% 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 ]

0 голосов
/ 23 января 2020

Айкон,

Теперь я понял !! Это была еще одна опечатка, вы переключили СМИ и события. (ты пытался держать меня в тонусе ?! :-)) Но вот почему конкат не сработал !! Итак, это окончательный рабочий результат:

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

Только дата не в правильном порядке, но я думаю, что это связано с моей настройкой сетки.

Спасибо, что помогли мне ......

0 голосов
/ 17 января 2020

Этот код выводит отдельные каналы по типу элементов (событие или видео).

{% 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 %}
...