在EJS中将变量渲染为HTML

MrJ*_*ger 89 ejs node.js express

我正在使用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();
Run Code Online (Sandbox Code Playgroud)

最后一行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>
Run Code Online (Sandbox Code Playgroud)

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

res.render('signup.ejs', {
    session: loginStatus(req)
    , form: signup_form_as_html
});
Run Code Online (Sandbox Code Playgroud)

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

小智 262

有了ejs你就可以拥有

<% code %> 
Run Code Online (Sandbox Code Playgroud)

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

<%= code %>
Run Code Online (Sandbox Code Playgroud)

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

<%- code %>
Run Code Online (Sandbox Code Playgroud)

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

由于你想打印你的变量并且没有转义它,你的代码将是最后一种类型(带有-<%).在你的情况下:

<%- my_form_content %>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅完整的ejs文档

  • 道具家伙勇敢,立即解决了我的问题 (7认同)

Pav*_*lev 14

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";
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助别人.