python中的模板文件评估

Posted

技术标签:

【中文标题】python中的模板文件评估【英文标题】:template files evaluation in python 【发布时间】:2011-02-21 03:17:57 【问题描述】:

我正在尝试使用 python 根据从主配置文件中获取的值将一组模板转换为一组配置文件。但是,我遇到了某些问题。考虑以下模板文件示例。

file1.cfg.template

%(CLIENT1)s %(HOST1)s  %(PORT1)d  C  %(COMPID1)s
%(CLIENT2)s %(HOST2)s  %(PORT2)d  C  %(COMPID2)s

此文件包含每个客户端的条目。有数百个这样的配置文件,我不想对每种类型的配置文件都有逻辑。给定从主 xml 配置文件读取的一组全局值,Python 应该自动替换并生成配置文件。但是,在上面的示例中,如果 CLIENT2 不存在,如何删除该行?我希望 Python 会使用这样的东西生成配置文件:

os.open("file1.cfg.template").read() % myhash

其中 myhash 是来自主配置文件的配置参数的哈希,可能根本不包含 CLIENT2。如果它不包含 CLIENT2,我希望该行从文件中消失。是否可以在文件中插入一些 'IF' 块并让 python 评估它?

感谢您的帮助。欢迎提出任何建议。

【问题讨论】:

如果有人可以在 python 或第三方框架中举例说明如何实现这种确切的行为,那就太棒了。 【参考方案1】:

听起来您可能已经超出了最初简单的自制模板解决方案。也许你应该搬到Jinja 之类的地方?与创建/继续维护自己的解决方案相比,简单地实施第三方解决方案可能不会那么令人头疼。

其他选项:

cheetah mako

【讨论】:

我发现人们从我自己回答的链接中对 Jinja 有很多好话要说。你个人推荐它而不是其他模板语言吗?谢谢你给我们小费。【参考方案2】:

也许您可以使用独立的 Django 模板。

How do I use Django templates without the rest of Django? - Stack Overflow

【讨论】:

你能举个例子,我怎样才能用 Django 实现上述行为?即在文件中有模板代码,读取它,评估它,使用 IF 块忽略第二行。 您可以在第 4 章:Django 模板系统djangobook.com/en/beta/chapter04 中找到示例。检查 % if % 标签。【参考方案3】:

鉴于文件已经存在,我会为 CLIENT2 之类的东西设置默认值(假设您提前知道所有可能的键)。您可能可以将默认值设置为不寻常的值,以便您可以这样做

config = os.open("file1.cfg.template").read() % myhash
config = [l for l in config.split('\n') if <l does not have unusual text>].join('\n')

我同意其他人的观点,从长远来看,更强大的模板会更好。

【讨论】:

如果模板变量没有出现在 myhash 中,有没有办法在字符串中默认模板变量。否则,设置默认值将非常困难。 我找到了解决方案。我将使用异常处理分别评估每一行。谢谢。

以上是关于python中的模板文件评估的主要内容,如果未能解决你的问题,请参考以下文章

django中将views.py中的python方法传递给html模板文件

如何通过 url 将数据从 python 文件发送到位于单独项目中的 html 文件(没有 html 作为模板)

我可以评估 django 模板中的表达式吗?

Smarty:评估存储在 PHP 变量中的模板

在 python 中从模板文件和 csv 数据生成输出文件

如果评估的变量为 False,为啥我的 django 模板中的这个 IF 语句会执行?