gpt4 book ai didi

Jinja2 - 在多个文件中拆分宏

转载 作者:行者123 更新时间:2023-12-03 21:07:04 24 4
gpt4 key购买 nike

给定一个文件中有很长数量的 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.htmlB.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”的预处理器。

最佳答案

您可以使用扩展从现有的宏文件继承。如果在“A”中您从“B”继承,则将“A”导入页面,您可以调用 B 的宏,就好像它们是文件“A”的一部分一样,无需在页面中额外导入。正如您所要求的,它在外观上看起来是同一个文件。这是如何完成的:

{% extends 'macrosdir/file.html' %}

关于Jinja2 - 在多个文件中拆分宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15388387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com