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

我刚开始使用Node.js,所以我构build了非常简单的应用程序来练习基础知识。 我试图得到一些像Django一样的模板inheritance工作,但是我在如何做到这一点上有些遗憾。

我明白,图书馆的“expression手柄”包括布局的概念,我认为这可能是最好的办法,但乍一看,我不知道它是否允许一步以上的inheritance,或者使用它来replace不同的块(我看到了一个总体布局,其中插入了其他模板来代替{{{body}}}标记,尽pipe可能有更多的技巧)。

所以,我的问题是:如何实现一个多层模板的inheritance(也有儿童插入不同的独立块,而不是一个单一的内容)? 我正在使用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> 

然后是另一个(中间模板),replace外部块的一些(可能会添加其他块):

 {{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> 

它不是100%清楚你要求模板的术语“inheritance”,但句柄模板可以包括模板,其中可以包括其他模板,其中可以包括模板,所以你可以根据需要嵌套。

例如,我只使用语法:

 {{> common_header}} 

common_header模板embedded到当前模板中。 该common_header本身可以embedded其他模板等等。


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


仅供参考,在这里和这里讨论使用Handlebars的类似Django的模板inheritance,以及这里的 Handlebars的布局扩展,以及更多关于在Handlebars中使用布局的讨论。


Swig似乎有这个function

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

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

任何登陆这个问题的人都可能想知道这个:Swig不再被支持,因为他们的github说

也就是说, Nunjucks看起来像是Javascript中可扩展模板的唯一select。 这个语法和Twig(PHP)非常相似,

我希望这有帮助