【问题标题】:Template Inheritance in Nunjucks, what are the requirements?Nunjucks 中的模板继承,有什么要求?
【发布时间】:2017-01-25 05:50:49
【问题描述】:

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

我渲染我的页面:

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 那样渲染它?

【问题讨论】:

    标签: jinja2 templating nunjucks


    【解决方案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" %}
    

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

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

    【讨论】:

    • 感谢您抽出宝贵时间,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 2011-10-12
    • 2010-12-06
    • 2010-10-13
    • 2012-11-22
    • 1970-01-01
    • 2016-03-17
    相关资源
    最近更新 更多