2014-01-22 8 views
8

ich diesen HTML-Schnipsel haben, die an vielen Orten in den jinja2 Vorlagen verwendet werden muss:einen Block von Code an mehreren Stellen in jinja2

<div class="usedalot">{{ somevalue }}</div> 

zum Beispiel in template1.html, template2.html . template3.html, wird dieser Code an mehreren Stellen wiederholt

<!-- template1.html, template2.html. template3.html --> 
<div class="usedalot">{{ somevalue }}</div> 
...... 
<div class="usedalot">{{ somevalue }}</div> 
.... 
<div class="usedalot">{{ somevalue }}</div> 
...... 

Statt das Kopieren und Einfügen gibt es someway diesen Code-Schnipsel als Block zu benutzen? Die Vererbung der jinja2-Vorlage (mit Blöcken) scheint dieses Problem nicht zu lösen.

Antwort

23

Was Sie suchen, heißt macro.

Makros werden in separaten Dateien platziert (z. B. macros.html).

{% macro usedalot(somevalue) %} 
    <div class="usedalot">{{ somevalue }}</div> 
{% endmacro %} 

Anschließend können Sie Ihre Makros in anderen Vorlagen

{% from 'macros.html' import usedalot %} 

importieren und sie dann verwenden, wenn

benötigt
{{ usedalot(1) }} 

Dies wird Ausgang

<div class="usedalot">1</div> 
+0

, die aber so unglaublich hässlich . Ich meine, es sieht gut aus, wenn dein Argument "1" ist. Was ist, wenn dein Argument ein großes Stück HTML ist? – Toskan

+0

Warum definieren Sie HTML in einem Zeichenfolgenliteral in einer Vorlage? Das klingt nach einem Code-Geruch. – dirn

+0

nein. Ich sage, ich will das nicht genau machen. Die Frage ist: Wie kann ich das machen? siehe hier https://stackoverflow.com/questions/45113110/jinja2-templating-with-components-blocks-templates – Toskan

Verwandte Themen