Наследование шаблонов в 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" %}
Это может привести к путанице и увеличит вероятность ошибки, но теоретически это сработает.
Изучите использование включений в некоторых областях, в этом случае может быть полезно не иметь дополнительный слой шаблонов.