2017-03-01 3 views
1

Ich möchte eine Vorlage Zeichenfolge aus einem Makro rendern. Ich habe versucht, es mit dem folgenden Makro zu tun, das die Vorlage mit {{ comment|safe }} rendert, aber Variablen in der Vorlage wie {{ name }} werden buchstäblich statt mit dem Wert name gerendert. Wie kann ich variable Daten in einem Makroargument zulassen?Übergeben Sie eine Vorlage Zeichenfolge zu einem Jinja-Makro

{% 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" 
) }} 

Ausgang:

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

Antwort

2

das nicht möglich ist.

Sie können jedoch einen caller in Jinja Makros haben, dass Sie passieren einen Block lässt:

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

Dann rufen Sie es wie folgt aus:

{% 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 %} 

Relevante Dokumente: http://jinja.pocoo.org/docs/2.9/templates/#call


Eine andere Möglichkeit, es zu lösen, wäre dies:

{% 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 
) }} 

Relevante Dokumente: http://jinja.pocoo.org/docs/2.9/templates/#block-assignments


Aus Gründen der Vollständigkeit, können Sie auch die Formatierung verwenden:

{{ 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

Vielen Dank für eine so hohe Qualität Antwort. Ihr Beitrag ist es, was S.O. eine großartige Gemeinschaft – Sparrowcide

Verwandte Themen