【问题标题】:How to ignore jinja2 braces {{}} in j2 template file如何忽略 j2 模板文件中的 jinja2 大括号 {{}}
【发布时间】:2017-11-05 11:27:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: variables ansible jinja2 ansible-2.x ansible-template


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      另一种选择:

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

      【讨论】:

      • 这是这里最整洁的一个,应该是公认的答案!谢谢
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-08
        • 2021-04-27
        • 1970-01-01
        • 2018-04-14
        • 1970-01-01
        • 2018-07-19
        • 1970-01-01
        • 2016-05-03
        相关资源
        最近更新 更多