Render variabel sebagai HTML di EJS


98

Saya menggunakan perpustakaan Formulir untuk Node.js ( Formulir ), yang akan membuat formulir untuk saya di backend sebagai:

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

Baris terakhir var signup_var signup_form_as_html = signup_form.toHTML();membuat blok HTML yang terlihat seperti ini:

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

Pada dasarnya hanyalah sebuah string HTML yang panjang. Saya kemudian mencoba membuatnya menggunakan EJS dan Express menggunakan kode berikut:

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

Tetapi pada rendering HTML hanyalah string yang saya posting di atas, bukan HTML yang sebenarnya (dan dengan demikian bentuk yang saya inginkan). Apakah ada cara untuk membuat string itu dirender sebagai HTML yang sebenarnya menggunakan EJS? Atau apakah saya harus menggunakan sesuatu seperti Jade?

Jawaban:


296

Dengan EJS Anda dapat memiliki beberapa tag:

    <% code %>

... yang merupakan kode yang dievaluasi tetapi tidak dicetak.

    <%= code %>

... yaitu kode yang dievaluasi dan dicetak (lolos).

    <%- code %>

... yang merupakan kode yang dievaluasi dan dicetak (tidak lolos).

Karena Anda ingin mencetak variabel Anda dan BUKAN menghindarinya, kode Anda akan menjadi tipe terakhir (dengan <%-). Dalam kasus Anda:

    <%- my_form_content %>

Untuk tag lainnya, lihat dokumentasi EJS lengkap


8
props dude bravo yang memperbaiki masalah saya secara instan
cbsm1th

hanya menghabiskan waktu berjam-jam mencari tahu bagaimana melakukan itu sampai saya menemukan posting ini. Terima kasih banyak !!!
Sam

Bagus, Anda menyelamatkan hari saya.
Afshin Mehrabani

Apakah menggunakan modul persis seperti yang ditanyakan di sini. Sangat beruntung :) Terima kasih
majidarif

Apa yang juga dapat digunakan untuk meloloskan diri dari karakter "(koma terbalik)?
Victor

16

Pembaruan Oktober 2017

Pengembangan ejs (v2, v2.5.7) baru terjadi di sini: https://github.com/mde/ejs Ejs lama (v0.5.x, 0.8.5, v1.0.0) tersedia di sini https: / /github.com/tj/ejs

Sekarang dengan ejs Anda dapat melakukan lebih banyak lagi. Kamu bisa memakai:

  • Output lolos dengan <%= %>(fungsi escape dapat dikonfigurasi)
  • Output mentah tidak lolos dengan <%- %>
  • Mode potong baris baru ('baris baru menyeruput') dengan -%>tag penutup
  • Mode spasi-spasi (slurp semua spasi) untuk aliran kontrol dengan <%_ _%>
  • Kontrol aliran dengan <% %>

Jadi, dalam kasus Anda itu akan menjadi di <%- variable %>mana variablesesuatu seperti itu

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

Saya harap ini membantu seseorang. 🙂


3

Saya memiliki masalah yang sama dengan rendering input textarea dari editor wysiwyg yang disimpan sebagai html di database saya. Browser tidak akan merendernya tetapi menampilkan html sebagai teks. Setelah berjam-jam mencari, saya menemukan

<%= data %> lolos data sementara

<%- data %>meninggalkan data 'mentah' (tidak lolos) dan browser sekarang dapat merendernya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.