首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在EJS中将变量呈现为HTML

在EJS中将变量呈现为HTML
EN

Stack Overflow用户
提问于 2012-04-26 11:47:05
回答 3查看 108K关注 0票数 110

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

代码语言:javascript
复制
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块:

代码语言:javascript
复制
<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呈现它,使用以下代码:

代码语言:javascript
复制
res.render('signup.ejs', {
    session: loginStatus(req)
    , form: signup_form_as_html
});

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-26 17:09:39

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

代码语言:javascript
复制
    <% code %>

..。它是经过计算但没有打印出来的代码。

代码语言:javascript
复制
    <%= code %>

..。它是计算并打印出来的代码(转义)。

代码语言:javascript
复制
    <%- code %>

..。它是计算并打印出来的代码(不是转义的)。

由于您希望打印变量而不是对其进行转义,因此您的代码将是最后一个类型(使用<%-)。在您的案例中:

代码语言:javascript
复制
    <%- my_form_content %>

有关更多标记,请参阅full EJS documentation

票数 328
EN

Stack Overflow用户

发布于 2018-08-20 13:48:12

我在渲染来自wysiwyg编辑器的textarea输入时遇到了同样的问题,该编辑器在我的数据库中保存为html。浏览器不会对其进行渲染,而是将html显示为文本。找了几个小时后,我发现

<%= data %>转义数据时

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

票数 4
EN

Stack Overflow用户

发布于 2022-02-18 08:43:13

根据ejs doc

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

<%_“空白吞噬”Scriptlet标签,去掉它之前的所有空白

<%=将值输出到模板(超文本标记语言转义)

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

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

<%%输出文字'<%‘

%>普通结束标记

-%>修剪模式('newline slurp')标签,修剪换行符后面的内容

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10326950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档