ファイル内にインクルードまたはマクロを追加するときに、jinjaでインデントを維持する方法があるかどうか疑問に思っています。 jinjaを使用してコードファイルを生成したいと思います。例は
ファイル:class.html
class MyClass:
def someOp():
pass
{% include "someOp.html" %}
ファイル:someOp.html
def someOp2():
pass
テンプレートの結果は次のようになります。
class MyClass:
def someOp():
pass
def someOp2():
pass
インクルードファイルの各行のインデントタグの前にjinjaにインデントを追加する方法はありますか?または、これを行うためにjinjaをカスタマイズする方法はありますか?
1つの方法は、インクルードをマクロでラップすることです。マクロは関数であるため、その出力をインデントフィルターに渡すことができます。
class MyClass:
def someOp():
pass
{% macro someop() %}{% include "someOp.html" %}{% endmacro %}
{{ someop()|indent }}
デフォルトでは、「indent」は4つのスペースをインデントし、最初の行をインデントしません。たとえば、次のように使用できます。さらにインデントするには「indent(8)」を参照してください。詳細については、 http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters を参照してください。
含めるものが最初にマクロとして定義されている場合は、それ以上のラッパーマクロは必要なく、インデントフィルターの使用に直接ジャンプできます。
私は同じことを達成するためにJinja2を探していましたが、複数行のブロックインデントを元のJinjaステートメントに合わせることが現在不可能であるという結論に達しました。
新しい構文を追加するために、Jinjaに小さなPRを投稿しました{%* ... %}
および{{* ... }}
まさにこれを行います。詳細については、PRを参照してください。