EJS'de bir değişkeni HTML olarak işleme


99

Node.js ( Formlar ) için Form kitaplığını kullanıyorum , bu da arka uçta benim için şu şekilde bir form oluşturacak:

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

Son satır var signup_var signup_form_as_html = signup_form.toHTML();aşağıdaki gibi görünen bir HTML bloğu oluşturur:

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

Temelde sadece uzun bir HTML dizesi. Daha sonra aşağıdaki kodu kullanarak EJS ve Express kullanarak oluşturmaya çalışıyorum:

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

Ancak HTML'yi oluştururken, gerçek HTML (ve dolayısıyla istediğim gibi bir form) yerine, yukarıda yayınladığım dizedir. EJS kullanarak bu dizeyi gerçek HTML olarak oluşturmanın bir yolu var mı? Yoksa Jade gibi bir şey kullanmak zorunda mıyım?

Yanıtlar:


305

EJS ile birkaç etiketiniz olabilir:

    <% code %>

... değerlendirilen ancak yazdırılmayan koddur.

    <%= code %>

... değerlendirilen ve yazdırılan (kaçan) koddur.

    <%- code %>

... değerlendirilen ve yazdırılan (kaçılmayan) koddur.

Değişkeninizi yazdırmak ve ondan kaçmak istemediğiniz için, kodunuz son tür olacaktır (ile <%-). Senin durumunda:

    <%- my_form_content %>

Daha fazla etiket için tam EJS belgelerine bakın


9
sorunumu anında
çözen

Bu yazıyı bulana kadar bunun nasıl yapılacağını bulmak için saatler harcadım. Çok teşekkürler !!!
Sam

Güzel, günümü kurtardın.
Afshin Mehrabani

Burada sorulan tam modülü kullanıyordu. Çok şanslı :) Teşekkürler
majidarif

"(Ters virgül) karakterinden de kaçmak için ne kullanılabilir?
Victor

17

Ekim 2017 güncelleştirmesi

Yeni ejs (v2 v2.5.7) gelişimi burada oluyor: https://github.com/mde/ejs eski ejs (v0.5.x, 0.8.5, v1.0.0) burada mevcuttur https: / /github.com/tj/ejs

Şimdi ejs ile daha da fazlasını yapabilirsiniz. Kullanabilirsiniz:

  • <%= %>(Kaçış işlevi yapılandırılabilir) ile çıkış karakterli çıkış
  • İle çıkış karaktersiz ham çıktı <%- %>
  • -%>Bitiş etiketi ile yeni satır kırpma modu ('yeni satır slurping')
  • Beyaz boşluk kırpma modu (tüm beyaz boşlukları karıştır) ile kontrol akışı için <%_ _%>
  • İle kontrol akışı <% %>

Yani, sizin durumunuzda o olacak <%- variable %>nereye variablegibi bir şey

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

Umarım bu birine yardımcı olur. 🙂


3

Veritabanıma html olarak kaydedilmiş bir wysiwyg düzenleyiciden metin alanı girdisini işlerken aynı sorunu yaşadım. Tarayıcı bunu oluşturmayacak, ancak html'yi metin olarak görüntüleyecektir. Saatler süren araştırmalardan sonra öğrendim

<%= data %> veri iken kaçtı

<%- data %>bırakılan veri 'ham' (çıkış karaktersiz) ve tarayıcı artık verileri oluşturabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.