给定一个文件中有大量 Jinja2 宏,我们称它为macros.html
.
我想将该文件分解为多个较小的文件,但是当我使用import
.
例如,假设我有
宏.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
在这个例子中,像这样:
一个.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
.
无论如何,那里有很多不必要的重复,因为我会为每个导入的文件有效地导入匿名模块名称,只是为了访问和手动命名它的每个宏成员。
似乎应该有更好的选择。
我考虑过的一个是编写我自己的文件加载器来加载和连接宏的全局。基本上是一个从头开始创建“macros.html”的预处理器。