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?
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
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.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ć.
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