Renderowanie zmiennej jako HTML w EJS

Używam Biblioteki Forms dla Node.js (Forms ), który wyrenderuje dla mnie formularz na backendzie w następujący sposób:

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

Linia końcowa var signup_var signup_form_as_html = signup_form.toHTML(); tworzy blok HTML, który wygląda tak:

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

W zasadzie tylko długi ciąg HTML. Następnie próbuję renderować go za pomocą EJS i wyrazić za pomocą następującego kodu:

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

Ale przy renderowaniu HTML jest po prostu ciągiem, który napisałem powyżej, a nie rzeczywistym HTML(a więc formą, jaką chcę). Czy jest jakiś sposób na zrobić, że ciąg renderuje jako rzeczywisty HTML za pomocą EJS? Czy będę musiał użyć czegoś takiego jak Jade?

Author: MrJaeger, 2012-04-26

3 answers

Z ejs możesz mieć

<% code %> 

... czyli kod, który jest oceniany, ale nie drukowany.

<%= code %>

... który jest kodem, który jest oceniany i drukowany (Escape).

<%- code %>

... który jest kodem, który jest oceniany i drukowany (a nie ucieczki).

Ponieważ chcesz wydrukować zmienną i nie wymykać się jej, Twój kod będzie ostatnim typem (z -<%). W Twoim przypadku:

<%- my_form_content %>

Więcej informacji znajduje się w Pełna dokumentacja ejs

 224
Author: Jakub Oboza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-22 22:05:23

Październik 2017 aktualizacja

Nowy ejs (v2, v2.5.7) rozwój odbywa się tutaj: https://github.com/mde/ejs Stary ejs (v0. 5.x, 0.8.5, v1. 0. 0) jest dostępny tutaj https://github.com/tj/ejs

Teraz z ejs możesz zrobić jeszcze więcej. Możesz użyć:

  • Wyjście awaryjne z <%= %> (funkcja escape konfigurowalna)
  • Unescaped raw output with <%- %>
  • Newline - tryb trim ('newline slurping') z zakończeniem -%> tag
  • Whitespace-trim mode (slurp all whitespace) dla przepływu sterowania z <%_ _%>
  • przepływ sterowania z <% %>

Więc w Twoim przypadku będzie to <%- variable %> Gdzie variable jest coś w rodzaju

var variable = "text here <br> and some more text here";
Mam nadzieję, że to komuś pomoże.
 6
Author: Pavel Kovalev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-08 06:48:49

Miałem ten sam problem z renderowaniem wejścia textarea z edytora wysiwyg zapisanego jako html w mojej bazie danych. Przeglądarka nie renderuje go, ale wyświetla html jako tekst. Po wielu godzinach poszukiwań odkryłem

<%= data %> dane ucieczki while

<%- data %>pozostawiono dane "surowe" (nieoznaczone), a przeglądarka mogła je teraz renderować.

 0
Author: Ufenei augustine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-20 05:48:12