Python 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'
这其实也不是理想的情况,因为我希望能在每次调用cheetah时,通过命令行指定名称/值的映射文件。
谢谢!
编辑:我知道我可以写一个Python脚本来读取文件,然后使用Cheetah的API进行替换。不过,我想找一种方法,通过命令行来填充我的模板。
解决了
感谢@pyfunc提供的文档链接,我现在明白怎么做了。主要的问题是要在cheetah命令行中加上--env
,这样可以把当前的环境变量传递给Cheetah。不过,这些环境变量必须先被导出。
1 个回答
0
Cheetah会把每一段#包括的文本放在一个嵌套的模板对象里。
使用
#include raw "prod.env"
也可以
#set global $HTTP_PORT="34120"
如果你想包含不同的环境文件,你也需要把它们做成模板。
请查看以下链接,里面有一些示例可以帮助你理解。