Python Cheetah - 指定模板的名称/值对

时间:2010-09-02 18:32:55

标签: python templates cheetah

我正在尝试模板化我的Apache httpd配置以便部署到不同的环境,我想使用Python语言Cheetah应用程序来实现这一点。但是,我对命令行cheetah程序有困难,我认为这是我对Cheetah的误解和缺乏文档的结合。

我的目标是拥有一个httpd.conf模板文件,并从特定于环境的定义文件中替换变量。

httpd.tmpl:

Listen $HTTP_PORT
...
#if $ENABLE_HTTPS == true
<Virtual Host *:$HTTPS_PORT>
    ...
</VirtualHost>
#end if

production.env:

HTTP_PORT=34120
HTTPS_PORT=34121
ENABLE_HTTPS=true

填写此Cheetah模板需要什么命令行?我用过:

cheetah f --oext conf --debug httpd

但显然prod.env不是作为输入文件读取的。将#include添加到模板文件的顶部:

#include "prod.env"

我的名字都没有找到:

Cheetah.NameMapper.NotFound: cannot find 'APACHE_PORT'

无论如何,这不是理想的情况,因为我希望能够在每次调用猎豹时在命令行上指定名称/值映射文件。

谢谢!

编辑:我知道我可以编写一个python脚本来执行文件读取,然后使用Cheetah API进行替换。但是,我正在寻找一种方法来使用命令行来填充我的模板。


解决

感谢@pyfunc提供的文档链接,我现在明白了如何实现这一目标。主要问题是在猎豹命令行上提供--env,该命令行将当前环境变量传递给猎豹。但是,必须首先导出这些环境变量。

1 个答案:

答案 0 :(得分:0)

Cheetah将每个#include文本包装在嵌套的Template对象中。

使用

#include raw "prod.env"

#set global $HTTP_PORT="34120"

要包含不同的env文件,你也会过于模板化。

请查看以下有助于您的示例。