Наследование шаблонов в Nunjucks, каковы требования?

Хорошо, супер простой вопрос, но я должен что-то упустить.

Я отображаю свою страницу:

router.get('/', function(req, res) {
        res.render('index.njk', {});
});

Создайте мою базовую раскладку main-layout.njk в папке раскладки:

<!DOCTYPE html>

<html>
    <body>       
        {% block content %}
        {% endblock %}   
    </body>  
</html>

Расширьте мой шаблон index.njk, чтобы добавить контент в макет:

{% extends 'layout/main-layout.njk' %} 

{% block content %}
<?php include_once("analyticstracking.php") ?>
<main>

   <p>sploooge</p>

   {% block panel %}{% endblock %}

</main>
{% endblock %} 

Теперь я бы хотел, чтобы index.njk был расширен с помощью panel.njk (файл находится в той же папке):

{% extends 'index.njk' %} 

{% block panel %}
    <p>second sploooge</p>
{% endblock %} 

Но я не могу заставить его появиться. В документации ничего не упоминается, но нужно ли это как-то отображать как index.njk?

1 ответ

Решение

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

Я получил это для работы со следующей конфигурацией:

Дерево файлов:

pages/
  -index.njk

templates/
  -base.njk
  -layout.njk

base.njk:

<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
   {% block content %}{% endblock %}
</body>
</html>

layout.njk

{% extends "base.njk" %}
{% block content %}
    Content
{% block more %}{% endblock %}
{% endblock %}

index.njk:

{% extends "layout.njk" %}
{% block more %}
    More Content
{% endblock %}

Выход:

<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
   Content
   More Content
</body>
</html>

Вы можете использовать любой шаблон, вам просто нужно добавить его в URL в расширении. Пример:

{% extends "templates/layouts/extras/template.njk" %}

Это может привести к путанице и увеличит вероятность ошибки, но теоретически это сработает.

Изучите использование включений в некоторых областях, в этом случае может быть полезно не иметь дополнительный слой шаблонов.

Другие вопросы по тегам