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模板文件