3

Twigで、出力の周りにHTMLをラップするフィルターを作成しました。例えば

{{ 'this is a "test"'|display }}

出力

<div id="container">
  <div id="content">
    this is a "test"
  </div>
  <div id="toolbar">
    <a href="/edit.php">edit</a>
  </div>
</div>

ジレンマは、後続のフィルターが元のコンテンツにのみ適用され、HTML全体には適用されないようにすることです。例えば

{{ 'this is a "test"'|display|upper|e }}

出力

&LT;DIV ID=&QUOT;CONTAINER&QUOT;&GT;
  &LT;DIV ID=&QUOT;CONTENT&QUOT;&GT;
    THIS IS A &QUOT;TEST&QUOT;
  &LT;/DIV&GT;
  &LT;DIV ID=&QUOT;TOOLBAR&QUOT;&GT;
    &LT;A HREF=&QUOT;/EDIT.PHP&QUOT;&GT;EDIT&LT;/A&GT;
  &LT;/DIV&GT;
&LT;/DIV&GT;

しかし、ご想像のとおり、私はこのような出力を好みます

<div id="container">
  <div id="content">
    THIS IS A &QUOT;TEST&QUOT;
  </div>
  <div id="toolbar">
    <a href="/edit.php">edit</a>
  </div>
</div>

フィルタの順序を次のように変更します

{{ 'this is a "test"'|upper|e|display }}

上位フィルターでは機能しますが、エスケープフィルターでは機能しません。これは、常にフィルターキューの最後に配置されるためです。また、autoescape=trueで動作するはずです。

小枝のドキュメントを読んで、私がやりたいことをするための標準的な方法を見つけることができません。誰かが似たようなことを試したことがありますか?または、誰かが問題を回避するアイデアを持っていますか?

前もって感謝します!

4

1 に答える 1

0

試す:

{{ 'this is a "test"'|upper|e|display }}

最初にコンテンツをフィルタリングしてから、ラップします。

于 2012-09-25T10:57:36.413 に答える