它们都使用相同的语法来插入变量。例如,如果我想要以下
<%= username %>
在我的下划线中,我的主 EJS 中断,因为它试图替换用户名并且主页中不存在这样的变量。
它们都使用相同的语法来插入变量。例如,如果我想要以下
<%= username %>
在我的下划线中,我的主 EJS 中断,因为它试图替换用户名并且主页中不存在这样的变量。
我遇到了这个问题,并认为我会分享我为解决客户端问题而找到的解决方案。这是您更改转义正则表达式的方式(通过 underscore.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()
.
当我想在后端(快递)上使用 ejs 模板渲染网页时,我遇到了同样的问题,同时我不得不在前端使用下划线模板。
我尝试了 Marc 的回答,但没有帮助,我认为在较新版本中使用它已经过时了。在较新版本的 ejs(mine is 2.3.3
) 中,您不能再使用ejs.open
and ejs.close
,ejs.delimiter
而是使用。
我在 ejs 中将分隔符更改为“$”,因此 ejs 只会处理<$ $>
标签以插入变量并将<% %>
标签视为无意义的语法。
app.set('view engine', 'ejs');
var ejs = require('ejs');
ejs.delimiter = '$';
app.engine('ejs', ejs.renderFile);
NOTE: I add the code above in app.js
file in express applications and it worked fine, and if you want to use it on front-end, just pass {'delimiter': '$'}
in ejs.render(str, options)
as options argument.