web-dev-qa-db-fra.com

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.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 dernière ligne var signup_var signup_form_as_html = signup_form.toHTML(); crée un bloc HTML qui se présente comme suit:

<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>

Fondamentalement, juste une longue chaîne de HTML. J'essaie ensuite 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 sur le rendu du HTML, c'est simplement la chaîne que j'ai posté ci-dessus, plutôt que le HTML réel (et donc un formulaire comme je le souhaite). Existe-t-il un moyen de rendre cette chaîne au format HTML à l'aide d'EJS? Ou devrais-je utiliser quelque chose comme Jade?

77
MrJaeger

Avec ejs tu peux avoir

<% code %> 

... qui est un code évalué mais non imprimé.

<%= code %>

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

<%- code %>

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

Puisque vous voulez imprimer votre variable et NE PAS l’échapper, votre code serait le dernier type (avec le -<%). Dans ton cas:

<%- my_form_content %>

Pour plus d'informations, consultez la documentation full ejs

234
Jakub Oboza

Mise à jour d'octobre 2017

Le développement de new ejs (v2, v2.5.7) se passe ici: https://github.com/mde/ejs L'ancien ejs (v0.5.x, 0.8.5 , v1.0.0) est disponible 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 <%- %>
  • Mode Newline-trim ('newline slurping') avec la balise de fin -%>
  • Mode ajustement des espaces (slurp all espaces) pour un flux de contrôle avec <%_ _%>
  • Flux de contrôle avec <% %>

Donc, dans votre cas, il va s'agir de <%- variable %>variable est quelque chose comme 

var variable = "text here <br> and some more text here";

J'espère que ça aidera quelqu'un. ????

7
Pavel Kovalev

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 base de données. Le navigateur ne le rend pas, mais affiche le code HTML sous forme de texte. Après des heures de recherche, j'ai découvert 

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

<%- data %>left data 'raw' (non échappé) et le navigateur peut maintenant le restituer.

0
Ufenei augustine