哪种python模板语言允许填充字典中的变量?

时间:2014-05-26 23:51:48

标签: python jinja2 template-engine mako

我想为某些外部软件包生成配置文件。配置文件需要一些敏感信息,如AWS访问密钥和密码等。我想在github上公开这些配置文件,但显然我不想硬编码和公开这些凭据。

凭据也必须显示在配置文件中的正确位置,因此我不能只是" cat"他们到最后。

我认为使用像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 :(得分:1)

如果您的模板语言只允许render(a=foo, b=bar),您可以这样解决:d = {"a": foo, "b": bar}; render(**d) - 不需要评估。

有关详情,请参阅https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists

答案 1 :(得分:1)

我认为你可以用任何模板系统来做到这一点。如果您的参数位于字典中,但模板API需要关键字,请使用argument unpacking syntax

my_template.render(**my_parameter_dict)

答案 2 :(得分:0)

这是基于意见的,但我将jinja2与YAML结合使用。

Jinja2非常灵活,允许循环,转义等。

YAML易于编辑,可以转换为python字典,这个Python字典的值可以用作渲染模板的基础。

我很高兴发现SaltStack解决方案默认使用这两个 - Jinja2和YAML。可能有充分的理由。