我在几个地方使用了一个全局标头,我试图在渲染模板时可以传递的变量中定义它的位置。
类似的东西:
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
答案 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 %>
希望有帮助。