Nunjucks 中的模板继承,有什么要求?

Template Inheritance in Nunjucks, what are the requirements?

好的超级基本问题,但我一定遗漏了一些东西。

我呈现我的页面:

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?

我认为这个问题出在您拥有 'middle' 文件的位置。

我使用以下配置使其工作:

文件树:

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" %}

这会变得非常混乱并增加出错的可能性,但理论上它会起作用。

也考虑在某些领域使用 include,在这种情况下,没有额外的模板层可能会有所帮助。