Rendern Sie eine Variable als HTML in EJS


97

Ich verwende die Formularbibliothek für Node.js ( Formulare ), die im Backend ein Formular für mich wie folgt rendert:

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

In der letzten Zeile var signup_var signup_form_as_html = signup_form.toHTML();wird ein HTML-Block erstellt, 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>

Grundsätzlich nur eine lange HTML-Zeichenfolge. Ich versuche dann, es mit EJS und Express mit dem folgenden Code zu rendern:

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

Beim Rendern des HTML-Codes handelt es sich jedoch lediglich um die Zeichenfolge, die ich oben gepostet habe, und nicht um den tatsächlichen HTML-Code (und damit um ein Formular, wie ich es möchte). Gibt es eine Möglichkeit, diese Zeichenfolge mithilfe von EJS als tatsächliches HTML zu rendern? Oder muss ich so etwas wie Jade verwenden?

Antworten:


293

Mit EJS können Sie mehrere Tags haben:

<% code %>

... das ist Code, der ausgewertet, aber nicht ausgedruckt wird.

<%= code %>

... das ist Code, der ausgewertet und ausgedruckt wird (maskiert).

<%- code %>

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

Da Sie Ihre Variable drucken und NICHT maskieren möchten, ist Ihr Code der letzte Typ (mit dem <%-). In deinem Fall:

<%- my_form_content %>

Weitere Tags finden Sie in der vollständigen EJS-Dokumentation


7
Requisiten Dude Bravo, die mein Problem sofort
behoben haben

Ich habe nur Stunden damit verbracht, herauszufinden, wie das geht, bis ich diesen Beitrag gefunden habe. Vielen Dank !!!
Sam

Schön, du hast meinen Tag gerettet.
Afshin Mehrabani

Wurde das genaue Modul verwendet, das hier gefragt wurde. So ziemlich glücklich :) Danke
Majidarif

Was kann verwendet werden, um auch dem Zeichen "(Anführungszeichen) zu entkommen?
Victor

15

Update Oktober 2017

Die Entwicklung der neuen 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) sind hier verfügbar https: / /github.com/tj/ejs

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

  • <%= %>Escape- Ausgabe mit (Escape-Funktion konfigurierbar)
  • Uneingeschränkte Rohleistung mit <%- %>
  • Newline-Trim-Modus ('Newline Slurping') mit -%>Ending-Tag
  • Whitespace-Trim-Modus (schlürfen Sie alle Whitespace) für den Kontrollfluss mit <%_ _%>
  • Kontrollfluss mit <% %>

In Ihrem Fall wird es also sein, <%- variable %>wo variableso etwas ist

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

Ich hoffe das hilft jemandem. 🙂


3

Ich hatte das gleiche Problem beim Rendern der Textbereichseingabe aus einem Wysiwyg-Editor, der als HTML in meiner Datenbank gespeichert war. Der Browser rendert es nicht, sondern zeigt das HTML als Text an. Nach stundenlangem Suchen fand ich es heraus

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

<%- data %>Die Daten wurden "roh" (nicht entkoppelt) und der Browser konnte sie jetzt rendern.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.