2012-05-30 3 views
15

Ich frage mich, ob es eine Möglichkeit gibt, den Einzug mit Jinja zu halten, wenn Sie ein Include oder Makro in eine Datei einfügen. Ich möchte jinja benutzen, um eine Codedatei zu erzeugen. Ein Beispiel wäreJinja halte Einzug auf Include oder Makro

Datei sein: class.html

class MyClass: 
    def someOp(): 
     pass 

    {% include "someOp.html" %} 

Datei: someOp.html

def someOp2(): 
    pass 

Das Ergebnis der Vorlage sollte sein:

class MyClass: 
    def someOp(): 
     pass 

    def someOp2(): 
     pass 

Wenn es irgendeine Möglichkeit, jinja den Einzug vor dem include-Tag für jede Zeile in der enthaltenen Datei voranzustellen? Oder gibt es eine Möglichkeit, Jinja dafür anzupassen?

+0

Das würde ich auch gerne sehen. –

Antwort

13

Eine Möglichkeit ist, das sind in einem Makro zu wickeln, dann weil die Makro-Funktion ist, kann die Ausgabe durch den Einzug Filter geleitet werden:

class MyClass: 
    def someOp(): 
     pass 

    {% macro someop() %}{% include "someOp.html" %}{% endmacro %} 
    {{ someop()|indent }} 

standardmäßig ‚Gedankenstrich‘ Einzüge 4 Räume und tut Die erste Zeile nicht einrücken, können Sie zB verwenden "Einrückung (8)", um weitere Einrückungen vorzunehmen, siehe http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters für weitere Einzelheiten.

Wenn das, was Sie einschließen, als Makro definiert ist, wird das weitere Wrapper-Makro nicht benötigt, und Sie können direkt zum Verwenden des Einzugfilters springen.

+16

Danke für die Antwort, es scheint fast wie, was ich brauche, aber kann ich es die Einzugsebene der Zeile verwenden, die es ist (anstatt die Ebene explizit anzugeben)? – Razvi