Как я могу повторить блок nunjucks в том же файле?

Я работаю над статическим сайтом, использующим gulp и nunjucks.

Например, у меня есть блок для заголовка статьи, который я хочу отобразить в двух местах на одной странице. Как бы я это реализовал?

Я видел в jinja, что вы можете сделать что-то вроде {% set title_s %}{% block title %}MY DEFAULT TITLE{% endblock %}{% endset %} в еще один пост о стеке с переполнением , но, похоже, он не работает в нунджаках. Я просто получаю текст «undefined», когда использую {{title_s}}.

Изменить: я просто использовал {% set title %}PAGE TITLE{% endset %} в дочернем шаблоне. Это означает, что я могу использовать это значение внутри родительского шаблона. Теперь я не уверен, какой путь правильный.


person Community    schedule 17.05.2019    source источник


Ответы (1)


Я не уверен, что ясно понимаю ваш вопрос, но посмотрите этот пример, если это то, о чем вы просите.

арт.njk

{% macro articleMacro(title, headerOnly = false) %}
  <article>
    {% if headerOnly %}
      <header>{{title}}</header>
    {% else %}
      <header>{{title}}</header>
      <p>article body</p>
      <footer></footer>
    {% endif %}
  </article>
{% endmacro %}

страница.njk

{% import "article.njk" as article %}

// this will render full article
{{ article('header one', false) }}

// this will render article header
{{ article('header one', true) }}
person Mostafa abobakr    schedule 27.05.2019
comment
Спасибо за комментарий, но я хочу иметь возможность повторять блоки, потому что блоки можно использовать для переопределения блоков в родительском шаблоне. Например, имеет смысл, когда пользователь может выполнить {% set title %}Foo Article{% endset %}, и заголовок будет обновляться во всех местах, где он используется в отображаемом шаблоне (например, в заголовке, а также в запросе комментариев). Тогда у вас есть {% set article %}Lorem Ipsum{% article %}. Прямо сейчас вы не можете использовать содержимое блока в нескольких местах, поэтому я нашел обходной путь, установив переменные и выполнив операторы if со значениями по умолчанию, что не идеально. - person ; 01.06.2019