Создаю свой первый сайт на Jekyll (использующий версию 4.0.0). Проблема в том, что переменные в Front Matter не распознаются.

HTML в _include (writing-post-featured-image.html)

<figure>
    <img class="feat-img" src="{{ site.baseurl }}/assets/images/{{ include.images }}" alt="{{ include.alt | default: 'lorem ipsum' }}" />
    <figcaption>{{ include.caption }}</figcaption>
</figure>

В _layout есть макет для текстовых страниц постов (writings-post.html)

{% include writing-post-featured-image.html image=post.featured-image alt=post.featured-image-alt %}

Наконец, в файле .md (под _posts) следующее Front Matter

layout: writings-post
title: my title
permalink: /writings/:title
featured-image: photo.jpg
featured-image-alt: about photo
caption: photo caption

Выход пуст

<figure>
    <img class="feat-img" src="" alt="lorem ipsum" />
    <figcaption></figcaption>
</figure>

Пожалуйста, помогите понять, почему так. Заранее спасибо.

2
01e5Dk 22 Окт 2019 в 23:31

2 ответа

Лучший ответ

Ваш синтаксис неверен.

1.) Поскольку вы передаете переменные со своей страницы, ваш тег include должен выглядеть следующим образом:

 {% include writing-post-featured-image.html 
    image=page.featured-image 
    alt=page.featured-image-alt 
    caption=page.caption %}

2.) В вашем включении есть синтаксическая проблема с include.images, которая должна быть include.image.

Примечание : когда вы передаете существующие переменные (не вычисляемые), вы можете пропустить их передачу в ваше включение, поскольку внутри включения вы можете видеть переменные страницы.

 {% include writing-post-featured-image.html %}

И ваше включает:

<figure>
    <img class="feat-img" 
         src="{{ site.baseurl }}/assets/images/{{ page.featured-image }}" 
         alt="{{ page.featured-image | default: 'lorem ipsum' }}" />
    <figcaption>{{ page.caption }}</figcaption>
</figure>
2
David Jacquel 23 Окт 2019 в 04:18

Правильный синтаксис на странице поста:

{% include writing-post-featured-image.html image=page.featured-image alt=page.featured-image-alt %}

Обратите внимание на синтаксис page. вместо синтаксиса post.. Однако, когда у вас есть цикл в макете, вы можете использовать это:

{% for post in site.posts %}
  {% include writing-post-featured-image.html image=post.featured-image alt=post.featured-image-alt %}
{% endfor %}
2
JoostS 22 Окт 2019 в 21:48
58511885