Отображать переменную как HTML в EJS

Я использую библиотеку форм для Node.js(Forms), которая предоставит мне форму на бэкэнде следующим образом:

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 и Express, используя следующий код:

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

Но при рендеринге HTML это просто строка, которую я опубликовал выше, а не фактический HTML (и, следовательно, форма, которую я хочу). Есть ли способ сделать эту строку рендерингом как фактический HTML с помощью EJS? Или мне придется использовать что-то вроде Jade?

Ответ 1

С ejs вы можете иметь

<% code %> 

... который является кодом, который оценивается, но не распечатывается.

<%= code %>

... который является кодом, который оценивается и распечатывается (экранируется).

<%- code %>

... который является кодом, который оценивается и распечатывается (не экранируется).

Поскольку вы хотите распечатать переменную и НЕ ее избежать, ваш код будет последним типом (с -<%). В вашем случае:

<%- my_form_content %>

Подробнее см. полную документацию ejs

Ответ 2

Обновление за октябрь 2017 года

Здесь развивается новый ejs (v2, v2.5.7): https://github.com/mde/ejs Старый ejs (v0.5.x, 0.8.5, v1.0.0) доступен здесь https://github.com/tj/ejs

Теперь с помощью ejs вы можете сделать еще больше. Вы можете использовать:

  • Экранированный выход с <%= %> (конфигурация управляющей функции)
  • Необработанный исходный вывод с <%- %>
  • Режим обрезки новой строки ('newline slurping') с тегом -%>
  • Режим обрезания пробелов (slurp all whitespace) для потока управления с помощью <%_ _%>
  • Управляющий поток с <% %>

Итак, в вашем случае это будет <%- variable %> где variable что-то вроде

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

Надеюсь, это поможет кому-то. 🙂