ファイル内の膨大な数の Jinja2 マクロを指定して、それを と呼びましょうmacros.html
。
そのファイルをいくつかの小さなファイルに分割したいのですが、import
.
たとえば、私が持っているとします
macros.html
{% macro A_1() %} A_1 {% endmacro %}
{% macro A_2() %} A_2 {% endmacro %}
{% macro A_3() %} A_3 {% endmacro %}
{% macro B_1() %} B_1 {% endmacro %}
{% macro B_1() %} B_1 {% endmacro %}
他の場所では、これを でインポートしimport "macros.html" as macros
ます。
この例では、次のように、macros.html
複数のファイルに分割したいと思います。A.html
B.html
A.html
{% macro A_1() %} A_1 {% endmacro %}
{% macro A_2() %} A_2 {% endmacro %}
{% macro A_3() %} A_3 {% endmacro %}
B.html
{% macro B_1() %} B_1 {% endmacro %}
{% macro B_1() %} B_1 {% endmacro %}
ただしmacros.html
、以前はimport "macros.html" as macros
.
いろいろ試してみましたが、期待どおりに動作しませんでした。jinja2.environment.TemplateModule object has no attribute 'A_1'
次のいずれかを実行すると、通常、エラーが発生しますmacros.html
{% include "A.html" %}
{# or #}
{% from "A.html" import A_1 %}
ある程度機能すると思われる唯一のオプションは次のとおりです。
{% import "A.html" as XYZ %}
{% set A_1 = XYZ.A_1 %}
残念ながら、この場合、 のマクロA.html
はメイン ファイルからグローバル マクロにアクセスできません。これは、マクロがすべて に含まれていたときの動作とは異なりますmacros.html
。
いずれにせよ、インポートされた各ファイルの匿名モジュール名を効果的にインポートして、各マクロメンバーにアクセスして手動で名前を付けるため、不必要な繰り返しがたくさんあります。
より良いオプションが必要なようです。
私が検討したことの 1 つは、マクロのグロブをロードして連結する独自のファイル ローダーを作成することです。基本的に「macros.html」をゼロから作成するプリプロセッサです。