111

我正在使用 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 之类的东西?

4

4 回答 4

333

使用 EJS,您可以拥有多个标签:

    <% code %>

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

    <%= code %>

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

    <%- code %>

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

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

    <%- my_form_content %>

有关更多标签,请参阅完整的 EJS 文档

于 2012-04-26T09:09:38.623 回答
20

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/mde/ejs /github.com/tj/ejs

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

  • 转义输出<%= %>(转义功能可配置)
  • 未转义的原始输出<%- %>
  • -%>带有结束标签的换行修剪模式('newline slurping')
  • 用于控制流的空白修剪模式(啜食所有空白)<%_ _%>
  • 控制流<% %>

<%- variable %>所以,在你的情况下,它将是variable类似的东西

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

我希望这可以帮助别人。

于 2017-10-08T06:48:49.280 回答
4

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

<%= data %>转义数据,而

<%- data %>留下数据'原始'(未转义),浏览器现在可以呈现它。

于 2018-08-20T05:48:12.233 回答
0

根据 ejs文档

<% 'Scriptlet' 标签,用于控制流,无输出

<%_ 'Whitespace Slurping' Scriptlet 标记,去掉它之前的所有空格

<%= 将值输出到模板中(HTML 转义)

<%- 将未转义的值输出到模板中

<%# 注释标签,不执行,不输出

<%% 输出文字 '<%'

%> 普通结束标签

-%> Trim-mode ('newline slurp') 标签,在换行符之后进行修剪

_%> 'Whitespace Slurping' 结束标签,删除它后面的所有空格

于 2022-02-18T08:43:12.737 回答