111

Node.js用のFormsライブラリ(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としてレンダリングする方法はありますか?それとも、ジェイドのようなものを使用する必要がありますか?

4

4 に答える 4

333

EJSを使用すると、いくつかのタグを付けることができます。

    <% code %>

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

    <%= code %>

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

    <%- code %>

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

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

    <%- my_form_content %>

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

于 2012-04-26T09:09:38.623 に答える
20

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

  • <%= %>(エスケープ機能を構成可能)でエスケープされた出力
  • エスケープされていない生の出力<%- %>
  • -%>Newline-終了タグ付きのトリムモード(「newlineslurping」)
  • ホワイトスペース-制御フローのトリムモード(すべてのホワイトスペースをスラップ)<%_ _%>
  • 制御フロー<% %>

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

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

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

于 2017-10-08T06:48:49.280 に答える
4

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

<%= data %>エスケープされたデータ

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

于 2018-08-20T05:48:12.233 に答える
0

ejsdocによる

<%'Scriptlet'タグ、制御フロー用、出力なし

<%_'Whitespace Slurping' Scriptletタグ、その前のすべての空白を削除します

<%=値をテンプレートに出力します(HTMLエスケープ)

<%-エスケープされていない値をテンプレートに出力します

<%#コメントタグ、実行なし、出力なし

<%%リテラル'<%'を出力します

%>プレーン終了タグ

-%> Trim-mode('newline slurp')タグ、改行に続いてトリミング

_%>'Whitespace Slurping'終了タグ、その後のすべての空白を削除します

于 2022-02-18T08:43:12.737 に答える