将变量传递给EJS include

时间:2014-01-10 23:18:39

标签: node.js ejs

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

类似的东西:

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

4 个答案:

答案 0 :(得分:20)

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

查看

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

<强>路由器

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

答案 1 :(得分:6)

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

答案 2 :(得分:4)

即使它是一个老问题,为了别人的缘故回答它。

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

所以你留下传递一些标志,如果在标题中检查或将标题解析为html并将其传递给所有模板......

答案 3 :(得分:0)

旧主题,但可能会对某人有所帮助。

EJS的伟大之处在于它只是Javascript。所以类似以下的内容应该起作用:

<%
const fs = require('fs');
const content = fs.readFileSync(partial);
%>
<%- content %>

希望有帮助。