在EJS中将变量呈现为HTML


98

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

Answers:


296

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

    <% code %>

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

    <%= code %>

...这是经过评估并打印(转义)的代码。

    <%- code %>

...这是经过评估并打印出来的代码(不可转义)。

由于您要打印变量而不是不对其进行转义,因此代码将是最后一个类型(带有<%-)。在您的情况下:

    <%- my_form_content %>

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


8
道具花花公子立即解决了我的问题
cbsm1th

只是花了几个小时弄清楚该怎么做,直到找到这篇文章为止。非常感谢 !!!
萨姆

很好,您救了我的一天。
Afshin Mehrabani 2014年

使用的是此处要求的确切模块。非常幸运:)谢谢
majidarif

什么也可以用于转义“(反逗号)字符?”
Victor

16

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";

我希望这可以帮助别人。🙂


3

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

<%= data %> 转义数据

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.