2017-03-01 9 views
1

マクロからテンプレート文字列をレンダリングします。私は{{ comment|safe }}を使用してテンプレートをレンダリングする次のマクロでそれを実行しようとしましたが、{{ name }}などのテンプレート内の変数は、nameの代わりに文字どおりにレンダリングされます。マクロ引数で可変デー​​タを許可するにはどうすればよいですか?テンプレート文字列をJinjaマクロに渡します。

{% macro comment_el(image_url, name, comment) %} 
    <div class="media no-border-top"> 
    <div class="media-left"> 
     <a href="{{ outgoing_url }}" > 
     <img class="media-object" src="{{ image_url }}" /> 
     </a> 
    </div> 
    <div class="media-body"> 
     <h4 class="media-heading"><a href="{{ outgoing_url }}" >{{ name }}</a></h4> 
     <p>{{ comment|safe }}</p> 
    </div> 
    </div> 
{% endmacro %} 
{{ comment_el(
    url_for("static", filename="img/c01.jpg"), 
    "Some Name", 
    "This comment is amazing. All I want to say is that {{ name }} is an amazing person" 
) }} 

出力:

<p>This comment is amazing. All I want to say is that {{ name }} is an amazing person</p> 

答えて

2

ことはできません。

しかし、あなたはブロックを渡すことができます神社マクロでcallerを持つことができます。

{% macro comment_el(image_url, name) %} 
    ... 
    <div class="media-body"> 
     <p>{{ caller() }}</p> 
    </div> 
    ... 
{% endmacro %} 

次に、このようにそれを呼び出す:

{% call comment_el(url_for("static", filename="img/c01.jpg"), "Some Name") -%} 
    This comment is amazing. All I want to say is that {{ name }} is an amazing person 
{%- endcall %} 

関連ドキュメント:http://jinja.pocoo.org/docs/2.9/templates/#call


これを解決する別の方法は次のとおりです。

{% set comment -%} 
    This comment is amazing. All I want to say is that {{ name }} is an amazing person 
{%- endset %} 
{{ comment_el(url_for("static", filename="img/c01.jpg"), 
    "Some Name", 
    comment 
) }} 

関連ドキュメント:http://jinja.pocoo.org/docs/2.9/templates/#block-assignments


完全を期すために、あなたはまた、書式を使用することができます

{{ comment_el(url_for("static", filename="img/c01.jpg"), 
"Some Name", 
"This comment is amazing. All I want to say is that %s is an amazing person" | format(name) 
) }} 
+1

は、このような高品質の答えをいただき、ありがとうございます。あなたの貢献はS.Oを作るものです。素晴らしいコミュニティ – Sparrowcide

関連する問題