Rendre une variable au format HTML dans EJS

J’utilise la bibliothèque de formulaires pour Node.js ( Forms ), qui rendra un formulaire pour moi sur le backend comme suit:

var signup_form = forms.create({ username: fields.ssortingng({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 dernière ligne var signup_var signup_form_as_html = signup_form.toHTML(); crée un bloc de HTML qui ressemble à ceci:

 

Fondamentalement, une longue chaîne de HTML. J’essaie alors de le rendre en utilisant EJS et Express en utilisant le code suivant:

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

Mais lors du rendu, le HTML est simplement la chaîne que j’ai publiée ci-dessus, plutôt que le HTML réel (et donc un formulaire que je veux). Existe-t-il un moyen de rendre cette chaîne en tant que code HTML réel avec EJS? Ou devrais-je utiliser quelque chose comme Jade?

    Avec ejs vous pouvez avoir

     <% code %> 

    … qui est le code qui est évalué mais pas imprimé.

     <%= code %> 

    … qui est le code qui est évalué et imprimé (échappé).

     <%- code %> 

    … qui est le code qui est évalué et imprimé (pas échappé).

    Puisque vous souhaitez imprimer votre variable et ne pas y échapper, votre code sera le dernier type (avec le -<% ). Dans ton cas:

     <%- my_form_content %> 

    Pour plus d'informations, consultez la documentation complète d'ejs

    Mise à jour d’octobre 2017

    Le nouveau développement des ejs (v2, v2.5.7) se produit ici: https://github.com/mde/ejs Les anciens ejs (v0.5.x, 0.8.5, v1.0.0) sont disponibles ici https: / /github.com/tj/ejs

    Maintenant, avec ejs, vous pouvez faire encore plus. Vous pouvez utiliser:

    • Sortie échappée avec <%= %> (fonction d’échappement configurable)
    • Sortie brute non échappée avec <%- %>
    • Newline-sortingm mode (‘newline slurping’) avec -%> balise de fin
    • Whitespace-sortingm mode (limite tout espace) pour le stream de contrôle avec <%_ _%>
    • Contrôle du stream avec <% %>

    Donc, dans votre cas, cela va être <%- variable %>variable est quelque chose comme

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

    J’espère que ça aidera quelqu’un. 🙂

    J’ai eu le même problème avec le rendu de l’entrée textarea depuis un éditeur wysiwyg enregistré au format HTML dans ma firebase database. Le navigateur ne le rendra pas mais affichera le HTML en tant que texte. Après des heures de recherche, j’ai découvert

    <%= data %> données échappées pendant que

    <%- data %> laissé les données «brutes» (non échappées) et le navigateur peut maintenant le rendre.