将变量传递给EJS include

Rua*_*ien 23 ejs node.js

我在几个地方使用了一个全局标头,我试图在渲染模板时可以传递的变量中定义它的位置.

就像是:

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

并在模板文件中:

<% include header %>
Run Code Online (Sandbox Code Playgroud)

header是使用render传入的值.

这似乎不可能,但也许我错过了一些我想在这里问的东西.

编辑:

这在以下答案的评论中提到,但总结一下,现在可以在EJS的第2版中找到.

请参阅:https://github.com/mde/ejs#includes 以及相关讨论:https://github.com/tj/ejs/issues/93

Ric*_*ick 21

这是一些可以完成动态包含的演示代码.

视图

<div flex class="main-container">
    <%- include(page) %>
</div>
Run Code Online (Sandbox Code Playgroud)

路由器

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


pr.*_*zar 6

添加了此功能:如果它不是路径(找不到文件),则将其评估为变量名称.https://github.com/visionmedia/ejs/pull/156

  • 谢谢.在发布此问题后,我很快就遇到了https://github.com/visionmedia/ejs/issues/93.虽然有一个拉取请求,但它似乎尚未发布到npm.希望它很快就会被接受并发布.一旦发生这种情况,我会将此答案标记为正确,以免误导可能在此处降落的其他人.无论出于何种原因,仅在Windows上使用节点全局对象的一个​​有趣的注释适用于此.所以<%include global.somepath%>以某种方式工作.但不是在Mac或Linux上.奇怪的一个. (4认同)