使用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)非常相似,
我希望这有帮助