Estou usando a biblioteca de formulários para Node.js ( formulários ), que renderizará um formulário para mim no back-end da seguinte forma:
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();
A linha final var signup_var signup_form_as_html = signup_form.toHTML();
cria um bloco de HTML que se parece com:
<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>
Basicamente, apenas uma longa sequência de HTML. Em seguida, tento renderizá-lo usando EJS e Express usando o seguinte código:
res.render('signup.ejs', {
session: loginStatus(req)
, form: signup_form_as_html
});
Mas, na renderização, o HTML é simplesmente a string que postei acima, em vez do HTML real (e, portanto, um formulário como eu quero). Existe alguma maneira de fazer com que essa string seja renderizada como HTML real usando EJS? Ou terei que usar algo como Jade?
Atualização de outubro de 2017
O desenvolvimento do novo ejs (v2, v2.5.7) está acontecendo aqui: https://github.com/mde/ejs O ejs antigo (v0.5.x, 0.8.5, v1.0.0) está disponível aqui https: / /github.com/tj/ejs
Agora, com ejs, você pode fazer ainda mais. Você pode usar:
<%= %>
escape com (função de escape configurável)<%- %>
-%>
tag final<%_ _%>
<% %>
Assim, no seu caso vai ser
<%- variable %>
ondevariable
é algo comoEspero que isso ajude alguém. 🙂
fonte
Tive o mesmo problema ao renderizar a entrada de textarea de um editor wysiwyg salvo como html em meu banco de dados. O navegador não irá renderizá-lo, mas exibirá o html como texto. Depois de horas de pesquisa, descobri
<%= data %>
dados escapados enquanto<%- data %>
deixou os dados 'brutos' (sem escape) e o navegador agora pode renderizá-los.fonte