Renderiza una variable como HTML en EJS

Estoy usando la biblioteca de Formularios para Node.js ( Formularios ), que me mostrará un formulario en el back-end de la siguiente manera:

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(); 

La última línea var signup_var signup_form_as_html = signup_form.toHTML(); crea un bloque de HTML que se ve así:

 

Básicamente solo una larga cadena de HTML. Luego bash renderizarlo usando EJS y Express usando el siguiente código:

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

Pero al renderizar, el HTML es simplemente la cadena que publiqué anteriormente, en lugar del HTML real (y, por lo tanto, un formulario como yo quiero). ¿Hay alguna manera de hacer que la cadena se represente como HTML real usando EJS? ¿O tendré que usar algo como Jade?

Con ejs puedes tener

 <% code %> 

… que es un código que se evalúa pero no se imprime.

 <%= code %> 

… que es un código que se evalúa y se imprime (se escapó).

 <%- code %> 

… que es un código que se evalúa y se imprime (no se escapa).

Como quiera imprimir su variable y NO escapar de ella, su código sería el último tipo (con el -<% ). En tu caso:

 <%- my_form_content %> 

Para obtener más información, consulte la documentación completa de ejs

Actualización de octubre de 2017

El nuevo desarrollo de ejs (v2, v2.5.7) está sucediendo aquí: https://github.com/mde/ejs Los antiguos ejs (v0.5.x, 0.8.5, v1.0.0) están disponibles aquí https: / /github.com/tj/ejs

Ahora con ejs puedes hacer aún más. Puedes usar:

  • Salida escapada con <%= %> (función de escape configurable)
  • Salida sin procesar de Unescaped con <%- %>
  • Modo de ajuste Newline (‘nueva línea sorbiendo’) con -%> etiqueta final
  • Modo de ajuste del espacio en blanco (absorber todos los espacios en blanco) para controlar el flujo con <%_ _%>
  • Control de flujo con <% %>

Entonces, en tu caso, va a ser <%- variable %> donde la variable es algo así como

 var variable = "text here 
and some more text here";

Espero que esto ayude a alguien. 🙂

Tuve el mismo problema al renderizar la entrada textarea de un editor wysiwyg guardado como html en mi base de datos. El navegador no lo renderizará, pero mostrará el html como texto. Después de horas de búsqueda, descubrí

<%= data %> escapó datos mientras

<%- data %> dejó los datos ‘en bruto’ (sin guardar) y el navegador podría renderizarlos.

    Intereting Posts