EJS包括包装

我可以包括另一个.ejs文件,将包裹当前的内容?

我想有一个像这样的总体布局:layout.js:

 <!DOCTYPE html> <html> <head> </head> <body> <div id="header"></div> <div id="content"> <!-- I want to "inject" my code here --> </div> </body> </html> 

我想从另一个文件中使用这个模板,比如:content.ejs

 <% inside(layout) ? { %> <a href="">content</a> <% } %> 

我可以做这样的事吗?

我目前正在做另一种方式,我用一个参数include_name调用布局,但这有点不方便。 我想调用包含通用内容本身的相关content.ejs 。 这可能吗?

谢谢,

来自EJS文档 :

EJS并不特别支持块,但可以通过包含页眉和页脚来实现布局,如下所示:

 <%- include('header') -%> <h1> Title </h1> <p> My page </p> <%- include('footer') -%> 

虽然有些框架有一些处理问题的设施。 例如Express直到版本3.x有布局支持和最新版本,你可以使用它作为一个独立的npm包: express-partials

有了这个包,你可以在你的骨架模板( layout.ejs )中定义一个<%- body %>区域,当你调用你想要的布局( content.ejs )时,express会将content.ejs作为<%- body %> (除非你设置{layout:false}然后它只呈现content.ejs ):

layout.ejs

 <!DOCTYPE html> <html> <head> </head> <body> <div id="header"></div> <div id="content"> <%- body %> </div> </body> </html> 

content.ejs

 <a href="">content</a> 

app.js

 var express = require('express') , partials = require('express-partials') , app = express(); // load the express-partials middleware app.use(partials()); app.get('/',function(req,res,next){ res.render('content.ejs') // -> render layout.ejs with content.ejs as `body`. }) app.listen(3000);