从 Jinja2 模板访问操作系统环境变量

新手上路,请多包涵

是否可以直接从 Jinja2 模板访问操作系统环境变量?

原文由 Roberto Aloi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

按照@Renier 在评论中关于自定义过滤器的指示,我想出了一个可能的解决方案。

定义 自定义过滤器

 def env_override(value, key):
  return os.getenv(key, value)

在环境中安装过滤器:

 env.filters['env_override'] = env_override

使用过滤器如下:

 "test" : {{ "default" | env_override('CUSTOM') }}

其中适当的环境变量可以设置为:

 export CUSTOM=some_value

如果设置了环境变量,输出将是:

 "test" : some_value

否则:

 "test" : default

原文由 Roberto Aloi 发布,翻译遵循 CC BY-SA 4.0 许可协议

我相信您可以像这样访问环境变量:

 {{ env['XMPP_DOMAIN'] or "localhost" }}

这是我最近看到的一个配置文件中的示例,用于 ejabberd 的 Docker 部署

 hosts:
  - "{{ env['XMPP_DOMAIN'] or "localhost" }}"

注意: 您可以在 Github 存储库的 运行 文件中看到示例的其余部分。

据我了解,繁重的工作是由这段代码完成的:

 readonly PYTHON_JINJA2="import os;
import sys;
import jinja2;
sys.stdout.write(
    jinja2.Template
        (sys.stdin.read()
    ).render(env=os.environ))
"""

而这段代码是用来生成模板文件的:

 cat ${CONFIGTEMPLATE} \
      | python -c "${PYTHON_JINJA2}" \
      > ${CONFIGFILE}

参考

原文由 slm 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题