2

我有一个 j2 文件,我想编辑并复制到我的远程服务器(作为我的 ansible 游戏的一部分)。该文件有几个用大括号表示的 3 个变量{{ }}。我怎样才能只针对命名的第二个变量{{ bar }}并忽略文件中的其他 2 个变量,以便将它们单独放置并复制到我的远程服务器?例如,我的 test.j2 文件包含:

line 1 {{ foo }}
line 2 {{ bar }}
line 3 {{ foo2 }}

{{ bar }}我可以在我的 ansible playbook 中明确地处理变量吗?如果是这样,我将如何(在语法上)在我的 ansible 剧本中编写它?

4

3 回答 3

7

下面的内容不是我推荐的,但是如果您只需要模板而不需要bar其他任何东西(或者如果bar总是先模板化,然后再模板化),您可以使用该{% raw %}块:

{% raw %}line 1 {{ foo }}{% endraw %}
line 2 {{ bar }}
{% raw %}line 3 {{ foo2 }}{% endraw %}

基本上,这个想法是将非 bar 变量标记为原始变量,这样 jinja 就不会对它们进行模板化。

于 2017-11-05T11:58:27.760 回答
3

另一种选择:

line 1 {{ '{{foo}}' }}
line 2 {{ bar }}
line 3 {{ '{{foo2}}' }}
于 2020-04-30T09:07:54.713 回答
2

您可以{% raw %}像@bow 提到的那样使用该块,或者还有一个小块代码的简写,它比仅使用原始块更短但不一定更具可读性。

line 1 {{ '{{' }} foo {{ '}}' }}
line 2 {{ bar }}
line 3 {{ '{{' }} foo {{ '}}' }}

http://jinja.pocoo.org/docs/2.9/templates/#escaping

于 2017-11-05T15:54:40.603 回答