哪个Python模板语言支持从字典填充变量?

0 投票
3 回答
1113 浏览
提问于 2025-04-18 07:39

我想为一些外部软件生成一个配置文件。这个配置文件需要一些敏感信息,比如AWS的访问密钥和密码等。我希望把这些配置文件放到GitHub上,但显然我不想把这些凭证直接写进去,暴露出来。

这些凭证还必须放在配置文件的正确位置,所以我不能只是把它们简单地加到文件末尾。

我想,使用像jinja2、mako、django这样的模板语言会是个不错的解决方案。这样我就可以把模板放到网上,让用户自己创建一个包含凭证的新文件,然后运行我提供的脚本来生成最终的配置文件。模板引擎还可以让我进行更复杂的编辑(我觉得)。

有没有人能推荐一个特别的模板引擎,让这个过程变得简单?我想要的功能是,先创建一个模板,然后通过提供一个包含变量的字典来生成最终文件。也许所有的模板引擎都能做到这一点,我不太清楚。

更具体一点,我希望有一个能做到这样的功能:

Template("Hello {{name}}, you are #{{num}}").render({"name":"Joe","num":1}) 

我看到的所有模板都像这样:

Template("Hello {{name}}, you are #{{num}}").render(name="Joe", num=1)

这让编写一个通用程序变得困难,因为它需要读取一个包含键值对的参数文件,然后把这些值传给模板进行渲染。例如,这可能需要使用“eval”,这就显得有些麻烦。

3 个回答

0

这段话有点主观,但我用的是jinja2和YAML这两个工具。

Jinja2非常灵活,可以进行循环、转义等操作。

YAML很容易编辑,可以转换成Python字典,而这个字典里的值可以用来生成你的模板。

我很高兴发现SaltStack的解决方案默认使用的就是这两个工具——Jinja2和YAML。可能是有很好的理由的。

1

我觉得你可以用任何模板系统来做到这一点。如果你的参数存放在一个字典里,但模板的接口需要用关键字来传递参数,你可以使用参数解包语法

my_template.render(**my_parameter_dict)
2

如果你的模板语言只允许使用 render(a=foo, b=bar) 这种方式,你可以这样变通一下:d = {"a": foo, "b": bar}; render(**d) —— 这样就不需要用到 eval 了。

想了解更多信息,可以查看 这个链接

撰写回答