3

我在 markdown 文件中使用 jinj2 通过 Mkdocs 创建文档模板。

整个过程是通过管道创建的,所以我可以看到我在模板中编写的 jinja2 代码做了什么,但是现在有一个特殊的问题阻碍了我:

假设我有 template1.md 和 template2.md 以及一个名为 file2.yml 的 var 文件

file2.yml 中的变量是 template2.yml 中包含的汽车,其内容类似于:

squads:
  
  - name: squad_name
    mail: squad@mail.com
    env_responsiblity: test

在 template2.md 上并在处理 jinja2 命令之后,字段已正确填写,所以到目前为止还可以。

我想要的是在我的第二个 template1.md 中调用 env_responsibility 值,如下所示:

{% import 'template2.md' as t %}

#{{environement}}

##Responsibility

{% if environement = t.env_responsibility %}

The environement {{environement}} is under the responsability of the {{t.squad.name}}

{% endif }%

可以肯定的是,小队名称和 env_responsibility 的调用不起作用,但我没有错误可以指出哪里出了问题。

有人可以帮忙突出这个问题吗?

4

2 回答 2

2

如果您需要在第二个模板中使用第一个模板的上下文时,您可以尝试包含而不是导入。

https://jinja.palletsprojects.com/en/2.11.x/templates/#import-visibility

另一方面,您似乎可以yml在渲染亚历山大已经说过的任何内容之前尝试将您的内容放入渲染上下文中。这样,您就可以在所有模板中使用数据。

于 2021-02-18T13:44:18.710 回答
2

无法导入插入到模板中的变量,因为这些变量仅在模板呈现时可用,之后不会保存在上下文中。您可以从一个模板导入另一个模板的变量是用 jinja 编写的变量。例如

模板_1

{{ rendered_variable }}
{% set jinja_variable = "Something" %}

模板_2

{% import "template_1" as t %}

This does not work: {{ t.rendered_variable }}
This works: {{ t.jinja_variable }}

您将需要为第二个模板提供您需要的第一个模板的值,如果在渲染之前它们的值未知,则无法绕过它。

于 2021-02-14T10:17:56.320 回答