it-swarm.com.de

Rendern Sie eine Variable als HTML in EJS

Ich verwende die Forms-Bibliothek für Node.js ( Forms ), die auf dem Backend ein Formular für mich so darstellt:

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

Die letzte Zeile var signup_var signup_form_as_html = signup_form.toHTML(); erstellt einen HTML-Block, der wie folgt aussieht:

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

Im Grunde nur eine lange HTML-Kette. Ich versuche dann, es mit EJS und Express mit folgendem Code zu rendern:

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

Aber beim Rendern des HTML-Codes handelt es sich einfach um den String, den ich oben geschrieben habe, und nicht um HTML (und somit ein Formular, wie ich es möchte). Gibt es eine Möglichkeit, diese Zeichenfolge mithilfe von EJS als tatsächlichen HTML-Code darzustellen? Oder muss ich so etwas wie Jade verwenden?

77
MrJaeger

Mit EJS kannst du haben

<% code %> 

... welcher Code ausgewertet, aber nicht ausgedruckt wird.

<%= code %>

... welcher Code ausgewertet und ausgedruckt wird (Escape-Code).

<%- code %>

... der Code, der ausgewertet und ausgedruckt (nicht maskiert) wird.

Da Sie Ihre Variable drucken und NICHT entgehen möchten, wäre Ihr Code der letzte Typ (mit dem -<%). In Ihrem Fall:

<%- my_form_content %>

Weitere Informationen finden Sie in der Dokumentation zu full ejs .

234
Jakub Oboza

Update vom Oktober 2017

Die Entwicklung von new ejs (v2, v2.5.7) findet hier statt: https://github.com/mde/ejs .__ Die alten ejs (v0.5.x, 0.8.5 , v1.0.0) finden Sie hier https://github.com/tj/ejs

Mit ejs können Sie jetzt noch mehr tun. Sie können verwenden:

  • Fluchtausgabe mit <%= %> (Fluchtfunktion konfigurierbar)
  • Unausgeformte Rohausgabe mit <%- %>
  • Newline-Trimm-Modus ('newline slurping') mit -%>-Endetikett
  • Whitespace-Trimm-Modus (Slurp all whitespace) für den Steuerungsfluss mit <%_ _%>
  • Kontrollfluss mit <% %>

In Ihrem Fall wird es also <%- variable %> sein, wobei variable so ähnlich ist 

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

Ich hoffe das hilft jemandem. ????

7
Pavel Kovalev

Das gleiche Problem hatte ich beim Rendern der Textbereichseingabe aus einem Wysiwyg-Editor, der als HTML in meiner Datenbank gespeichert wurde. Der Browser rendert es nicht, sondern zeigt die HTML-Datei als Text an. Nach stundenlangem Suchen habe ich herausgefunden 

<%= data %> Escape-Daten während

<%- data %>left data 'raw' (unescaped) und der Browser könnte sie jetzt rendern.

0