如何将下划线.js模板与 EJS 结合使用



它们都使用相同的语法来插入变量。 例如,如果我想要以下内容

<%= 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.openejs.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)即可。

最新更新