在EJS中将变量渲染为HTML

时间:2012-04-26 03:47:05

标签: node.js express ejs

我正在使用Node.js(Forms)的Forms库,它将在后端为我呈现一个表单,如下所示:

var signup_form = forms.create({
    username: fields.string({required: true})
    , password: fields.password({required: true})
    , confirm:  fields.password({
        required: true
        , validators: [validators.matchField('password')]
    })
    , email: fields.email()
});
var signup_form_as_html = signup_form.toHTML();

最后一行var signup_var signup_form_as_html = signup_form.toHTML();创建一个HTML块,看起来像这样:

<div class="field required"><label for="id_username">Username</label><input type="text" name="username" id="id_username" /></div><div class="field required"><label for="id_password">Password</label><input type="password" name="password" id="id_password" /></div><div class="field required"><label for="id_confirm">Confirm</label><input type="password" name="confirm" id="id_confirm" /></div><div class="field"><label for="id_email">Email</label><input type="text" name="email" id="id_email" /></div>

基本上只是一长串HTML。然后我尝试使用以下代码使用EJS和Express渲染它:

res.render('signup.ejs', {
    session: loginStatus(req)
    , form: signup_form_as_html
});

但是渲染HTML只是我在上面发布的字符串,而不是实际的HTML(因此是我想要的表单)。有没有办法使用EJS将该字符串渲染为实际的HTML?或者我必须使用像Jade这样的东西吗?

3 个答案:

答案 0 :(得分:237)

使用ejs,你可以拥有

<% code %> 

...这是已评估但未打印出来的代码。

<%= code %>

...这是评估和打印出来的代码(转义)。

<%- code %>

...这是评估和打印出来的代码(未转义)。

由于您要打印变量而不是转义它,您的代码将是最后一种类型(使用-<%)。在你的情况下:

<%- my_form_content %>

有关详情,请参阅full ejs documentation

答案 1 :(得分:9)

2017年10月更新

新ejs (v2,v2.5.7)开发正在此处进行:https://github.com/mde/ejs 这里有旧的ejs(v0.5.x,0.8.5,v1.0.0)https://github.com/tj/ejs

现在有了ejs,你可以做得更多。您可以使用:

  • 使用<%= %>(转义函数可配置)
  • 转义输出
  • <%- %>
  • 未转义的原始输出
  • 带有-%>结尾标记
  • 的换行模式('换行啜饮')
  • 使用<%_ _%>
  • 控制流的空白修剪模式(啜饮所有空白)
  • 使用<% %>
  • 控制流程

所以,在你的情况下,<%- variable %> variable就像是

var variable = "text here <br> and some more text here";

我希望这有助于某人。

答案 2 :(得分:0)

在渲染从数据库中保存为html的所见即所得编辑器输入的textarea时,我遇到了同样的问题。浏览器不会渲染它,而是将html显示为文本。经过数小时的搜索,我发现了

<%= data %>在转义数据的同时

<%- data %>将左侧数据“原始”(未转义),浏览器现在可以呈现它。