使用Node.js,Handlebars和Express进行模板继承

时间:2015-03-04 19:25:10

标签: javascript node.js inheritance express handlebars.js

我刚刚开始使用Node.js,所以我正在构建非常简单的应用程序以实践基础知识。我试图让一些类似Django的模板继承工作,但我对如何做它有点不知所措。

据我所知,图书馆“快递把手”包括布局的概念,我认为这可能是最好的方法,但乍一看我不知道它是否允许不止一步继承,或使用它来替换不同的块(我看到一个总体布局,其中插入其他模板代替{{{body}}}标签,虽然可能有更多的技巧)。

所以,我的问题是:如何实现多层模板继承(同样,子项将内容插入到不同的单独块中,而不是单个块)?我正在使用Node.js,Express和把手,但如果后两者不可能,我不介意尝试其他框架或模板化语言。

谢谢!

修改

我的意思的伪编码示例:

首先,我们可以有一个共同的外部模板:

<html>
    <head></head>
    <body>
        <h1> Main Title </h1>
        <h2> {{section name block}} </h2>
        <h3> {{subsection name block}} </h3>
        {{content block}}
    </body>
</html>

然后在它下面的另一个(中间模板),替换一些外部的块(并可能添加其他块):

{{inheriting from outer template}}
{{section name block}} Section Three {{/block}}

最后是一个内部的,它将是从javascript代码调用的那个:

{{inheriting from middle template}}
{{subsection name block}} Subsection Two {{/block}}
{{content block}}
    <p>This is the content of Section Three, Subsection Two.</p>
{{/block}}

处理内部模板时的结果是:

<html>
    <head></head>
    <body>
        <h1> Main Title </h1>
        <h2> Section Three </h2>
        <h3> Subsection Two </h3>
        <p>This is the content of Section Three, Subsection Two.</p>
    </body>
</html>

3 个答案:

答案 0 :(得分:3)

对于模板,术语“继承”并不是100%清楚你要求的,但是把手模板可以包含模板,其中可以包含其他模板,这些模板可以包含模板,因此您可以根据需要进行嵌套。

例如,我只使用语法:

{{> common_header}}

common_header模板嵌入当前模板中。 common_header本身可以嵌入其他模板等等。


你也可以使用布局(讨论here),它允许你有一个类似于主人的模板,可以渲染不同的内容。


仅供参考,讨论了使用Handlebars herehere的Django式模板继承以及Handlebars here的布局扩展,以及更多关于在Handlebars中使用布局的讨论{{3 }}


答案 1 :(得分:2)

Swig似乎有这种功能

http://paularmstrong.github.io/swig/docs/#inheritance

没有亲自使用它,但看起来像PHP的Twig一样的继承语法,所以应该没问题

答案 2 :(得分:0)

任何登陆此问题的人都可能想知道这一点:不再支持Swig作为github says

那就是说,Nunjucks看起来是Javascript中可扩展模板的唯一选择。语法非常类似于Twig(PHP)

我希望这会有所帮助