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

3 投票
1 回答
1234 浏览
提问于 2025-04-16 03:38

我正在尝试把我的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"

如果你想包含不同的环境文件,你也需要把它们做成模板。

请查看以下链接,里面有一些示例可以帮助你理解。

撰写回答