它们都使用相同的语法来插入变量。 例如,如果我想要以下内容
<%= username %>
在我的下划线中,我的主要 EJS 中断是因为它试图替换用户名并且主页中不存在这样的变量。
我遇到了这个问题,并认为我会分享我找到的解决问题的解决方案。以下是您更改转义正则表达式的方法(通过下划线.js文档):
_.templateSettings = {
interpolate : /{{(.+?)}}/g
};
var template = _.template( "{{example_value}}");
将 <%= %> 更改为 {{ }}。
我认为方括号默认在 EJS 中有效:
[%= username %]
如果您需要更高级,EJS github 页面描述了如何创建自定义标签:
var ejs = require('ejs');
ejs.open = '{{';
ejs.close = '}}';
- 我认为第二个"更高级"的部分可能特定于服务器端应用程序
https://github.com/visionmedia/ejs
使用客户端 GitHub 示例,在渲染时需要执行如下语法:
var html = require('ejs').render(users, { open: "^%", close: "%^" });
选项是render()
的第二个参数。
当我想在后端(express)上使用 ejs 模板呈现网页时,我遇到了同样的问题,同时我不得不在前端使用下划线模板。
我尝试了 Marc 的答案,但它没有帮助,我认为它在新版本中使用已经过时了。在较新版本的 ejs(我的是 2.3.3
),你不能再使用 ejs.open
和 ejs.close
,改用ejs.delimiter
。
我在 ejs 中将分隔符更改为"$",因此 ejs 只能处理<$ $>
标签以插入变量<% %>
并将标签作为无意义的语法。
app.set('view engine', 'ejs');
var ejs = require('ejs');
ejs.delimiter = '$';
app.engine('ejs', ejs.renderFile);
注意:我在快速应用程序中app.js
文件中添加了上面的代码,它工作正常,如果您想在前端使用它,只需将{'delimiter': '$'}
作为选项参数传递ejs.render(str, options)
即可。