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

时间:2017-01-25 05:50:50

标签: jinja2 templating 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 %} 

现在我想通过panel.njk扩展index.njk(该文件位于同一个文件夹中):

{% extends 'index.njk' %} 

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

但我不能让它出现。文档没有提到任何内容,但我需要以某种方式呈现它像index.njk?

1 个答案:

答案 0 :(得分: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>

您可以使用任何位置的模板,您只需确保将其添加到扩展中的网址即可。示例:

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

这会让人感到非常困惑并增加错误的可能性,但理论上它会起作用。

考虑在某些领域使用包含,在这种情况下,没有额外的模板层可能是有益的。