変数をEJSでHTMLとしてレンダリングする


97

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(つまり、希望するフォーム)ではなく、上記で投稿した文字列です。EJSを使用してその文字列を実際のHTMLとしてレンダリングする方法はありますか?または、ジェイドのようなものを使用する必要がありますか?

回答:


293

EJSでは、いくつかのタグを使用できます。

<% code %>

...評価されるが印刷されないコードです。

<%= code %>

...これは、評価されて出力される(エスケープされる)コードです。

<%- code %>

...評価されて出力される(エスケープされない)コードです。

変数を出力し、エスケープしたくないので、コードは(を使用した<%-)最後のタイプになります。あなたの場合:

<%- my_form_content %>

その他のタグについては、完全なEJSドキュメントを参照してください


7
小道具男ブラボーは私の問題を即座に修正しました
cbsm1th

この投稿が見つかるまで、その方法を考え出すのに何時間も費やしました。本当にありがとう !!!
Sam

いいですね、あなたは私の日を救った。
Afshin Mehrabani 2014

ここで尋ねたとおりのモジュールを使用していました とても幸運です:)ありがとう
majidarif

"(逆コンマ)文字もエスケープするために何が使用できますか?
Victor

15

2017年10月の更新

新しい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を使用すると、さらに多くのことができます。以下を使用できます。

  • エスケープされた出力<%= %>(エスケープ機能は構成可能)
  • エスケープされていない生出力 <%- %>
  • -%>終了タグ付きの改行トリムモード(「改行丸呑み」)
  • での制御フローのための空白トリムモード(すべての空白を丸める) <%_ _%>
  • 制御フロー <% %>

だから、あなたの場合、それは<%- variable %>どこにvariableあるのでしょうか

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

これが誰かの役に立つことを願っています。🙂


3

データベースにhtmlとして保存されたwysiwygエディターからのtextarea入力のレンダリングで同じ問題が発生しました。ブラウザはレンダリングしませんが、htmlをテキストとして表示します。何時間も検索した結果、

<%= data %> エスケープ中のデータ

<%- data %>データを「生」(エスケープなし)のままにして、ブラウザでレンダリングできるようになりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.