2017-03-01 69 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