2016-04-22 9 views
2

内で動作しないだけで2 <br>ショー上記のコードの安全なフラグ小枝安全なHTMLは、安全なコンテンツの小枝マクロを使用して、マクロ

{% macro identity(value) %} 
    {{ value }} 
{% endmacro %} 
{{ "<br>"| raw }} 
{{ _self.identity( "<br>"| raw) }} 
{% autoescape false %} 
    {{ _self.identity( "<br>"| raw) }} 
{% endautoescape %} 

を削除しているようです。エスケープを無効にする方法、または小枝マクロを編集せずにコンテンツを安全にマークする方法はありますか?

+1

おそらく '_self.identity("
")と書いたかったのでしょうか?あなたが関数からの生の結果を望むならば、「生の」。 –

+0

動作しません。私はこれがフィルタでは '{{}}'があり、これはエスケープフィルタ '
| e。私の唯一の回避策は、すべてのマクロに生のフィルターを置き、必要なときに手動でエスケープすることです。 '' '{%マクロID(%)%} {{値| raw}} {%endmacro%} {{_self.identity(no_safe_content)| e}} '' ' – Jerome

+0

はい、それは' {{value | raw}} 'でのみ動作します。 '{{value}}'はHTMLタグをエスケープするように見えますが、 '{%autoescape false%}'を呼び出すとHTMLタグがHTMLエンティティに変換されているので結果は変わりません。 –

答えて

0

実際には、マクロ内のどのようなタグも入力をエスケープしないようにするために、生のフィルタをマクロに配置する必要があります。これは少なくとも私の意見では、予想される動作です。

Twigでは、マクロは機能やフィルタではなく、定型的なタグやコードを繰り返さないようにする簡単なショートカットです。

マクロを呼び出して考える代わりに、{{ _self.identity("<br>"| raw) }}は、実際にあなたが書いているものは{{ {{ "<br>"| raw }} }}だと思っています。あなたが書いた式ではなく、マクロの入力の出力をリテラルとして渡しています。

入力した入力をテンプレートとして使用してマクロを動作させたい場合は、渡されたものの出力で動作するように設計されたものではなく、template_from_stringの機能を有効にすることができます。