将variables传递给EJS包括

我有一个全局标题在几个地方使用,我试图定义它的位置在一个variables,可以在渲染模板时传递。

就像是:

var headerLocation = 'some/location/header.ejs'; res.render( viewDir + '/index', { header: headerLocation } ); 

并在一个模板文件中:

 <% include header %> 

头是与渲染传入的值。

这似乎不可能,但也许我错过了一些东西,所以想我会问这里。

编辑:

在下面的答案的评论中提到了这一点,但总而言之,现在在EJS的第2版中已经提供了这一点。

看到这里: https : //github.com/mde/ejs#includes和相关的讨论在这里: https : //github.com/tj/ejs/issues/93

此function已被添加:如果它不是path(文件未find),它被评估为variables名称。 https://github.com/visionmedia/ejs/pull/156

这里是一些可以实现dynamic包含的演示代码。

视图

 <div flex class="main-container"> <%- include(page) %> </div> 

路由器

 router.get('/', function (req, res, next) { res.render('pages/index', { page: 'home' }); }); 

尽pipe它是一个古老的问题,为了别人的回答。

根据github的文档,似乎EJS没有块的概念,只有编译时才包含。 由于其编译时间包括,您需要硬编码的位置。

所以你留下了传递一些标志,如果在标题中检查或parsing标题为HTML并将其传递给所有模板…