Визуализация переменной как HTML в EJS
Я использую библиотеку форм для узла.js (формы), который будет отображать форму для меня на бэкэнде так:
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();
последняя строка var signup_var signup_form_as_html = signup_form.toHTML();
создает блок HTML, который выглядит так:
<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>
в основном просто длинная строка HTML. Затем я пытаюсь отобразить его с помощью EJS и выразить с помощью следующего кода:
res.render('signup.ejs', {
session: loginStatus(req)
, form: signup_form_as_html
});
но при рендеринге HTML-это просто строка, которую я опубликовал выше, а не фактический HTML (и, таким образом, a форма, как я хочу). Есть ли способ сделать эту строку визуализации как фактический HTML с помощью EJS? Или мне придется использовать что-то вроде нефрита?
3 ответа:
С ejs вы можете иметь
<% code %>
... который является кодом, который оценивается, но не распечатывается.
<%= code %>
... который является кодом, который вычисляется и распечатывается (экранируется).
<%- code %>
... который является кодом, который оценивается и распечатывается (не экранируется).
поскольку вы хотите напечатать свою переменную и не экранировать ее, ваш код будет последним типом (с
-<%
). В вашем случае:<%- my_form_content %>
Подробнее см. полная документация ejs
октябрь 2017 обновление
The новый ejs (v2, v2.5.7) развитие происходит здесь:https://github.com/mde/ejs Старый EJS по (версии v0.5.х, 0.8.5, В1.0.0) здесь https://github.com/tj/ejs
теперь с ejs вы можете сделать еще больше. Вы можете использовать:
- вырвалась наружу с
<%= %>
(функция escape настраивается)- неэкранированные сырой продукции с
<%- %>
- Newline-режим обрезки ('newline slurping') с
-%>
заканчивая тегом- пробел-режим обрезки (slurp all whitespace) для потока управления с
<%_ _%>
- поток управления с
<% %>
так, в вашем случае это будет
<%- variable %>
здесьvariable
что-то вродеvar variable = "text here <br> and some more text here";
Я надеюсь, что это поможет кому-то.
у меня была такая же проблема с рендерингом ввода textarea из редактора wysiwyg, сохраненного как html в моей базе данных. Браузер не будет отображать его, но отображается html в виде текста. После нескольких часов поиска, я узнал
<%= data %>
экранированные данные в то время как
<%- data %>
left data 'raw'(unescaped) и браузер теперь может отображать его.