在 EJS 中将变量呈现为 HTML

我正在使用 Node.js 的 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>

Basically just a long string of HTML. I then try to render it using EJS and Express using the following code:

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

但是在呈现 HTML 时,它只是我上面提到的字符串,而不是实际的 HTML (因此是我想要的表单)。有没有什么方法可以使字符串呈现为实际的 HTML 使用 EJS?还是我得用像杰德这样的东西?

121521 次浏览

With EJS you can have several tags:

    <% code %>

这些代码是经过评估的,但是没有打印出来。

    <%= code %>

... 这是被计算和打印出来的代码(转义)。

    <%- code %>

... which is code that is evaluated and printed out (not escaped).

因为您希望打印变量并且不转义它,所以您的代码将是最后一个类型(使用 <%-)。就你而言:

    <%- my_form_content %>

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

2017年10月最新情况

新眼睛(v2,v2.5.7)的开发正在这里进行: < a href = “ https://github.com/mde/ejs”rel = “ norefrer”> 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";

我希望这能帮到别人。

I had the same issue with rendering the textarea input from from a wysiwyg editor saved as html in my database. The browser will not render it but displayed the html as text. After hours of searching, I found out

转义数据时

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

按照惯例 医生

<% ‘ Scriptlet’标记,对于 control-flow,没有输出

<% _‘ Whitespace Slurping’Scriptlet 标记,去掉前面的所有空格

<%= Outputs the value into the template (HTML escaped)

<%- Outputs the unescaped value into the template

<% # 注释标记,没有执行,没有输出

<% 输出一个文字“ <%”

%> Plain ending tag

-% > Trim-mode (‘ newline slurp’)标记,在 newline 之后进行剪裁

_% > ‘ Whitespace Slurping’结束标记,删除后面的所有空格