用于纯文本输出的Python技术或简单模板系统

时间:2011-06-17 12:25:18

标签: python templates

我正在寻找Python的技术或模板系统,以便将输出格式化为简单文本。我需要的是它能够遍历多个列表或dicts。如果我能够将模板定义到单独的文件(如output.templ)而不是将其硬编码到源代码中,那将是很好的。

作为我想要实现的简单示例,我们有变量titlesubtitlelist

title = 'foo'
subtitle = 'bar'
list = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

在模板中运行,输出看起来像这样:

Foo
Bar

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

怎么做?谢谢。

4 个答案:

答案 0 :(得分:166)

您可以使用标准库string template

所以你有一个文件foo.txt

$title
...
$subtitle
...
$list

和字典

d={ 'title':title, 'subtitle':subtitle, 'list':'\n'.join(list) }

然后很简单

from string import Template
#open the file
filein = open( 'foo.txt' )
#read it
src = Template( filein.read() )
#do the substitution
src.substitute(d)

然后您可以打印src

当然,正如Jammon所说,你有很多其他好的模板引擎(这取决于你想做什么......标准字符串模板可能是最简单的)


完整的工作示例

foo.txt的

$title
...
$subtitle
...
$list

example.py

from string import Template
#open the file
filein = open( 'foo.txt' )
#read it
src = Template( filein.read() )
#document data
title = "This is the title"
subtitle = "And this is the subtitle"
list = ['first', 'second', 'third']
d={ 'title':title, 'subtitle':subtitle, 'list':'\n'.join(list) }
#do the substitution
result = src.substitute(d)
print result

然后运行example.py

$ python example.py
This is the title
...
And this is the subtitle
...
first
second
third

答案 1 :(得分:14)

如果您更喜欢使用标准库附带的内容,请查看format string syntax。默认情况下,它无法像输出示例中那样格式化列表,但您可以使用覆盖custom Formatter方法的convert_field进行处理。

假设您的自定义格式化程序cf使用转换代码l来格式化列表,这应该会生成给定的示例输出:

cf.format("{title}\n{subtitle}\n\n{list!l}", title=title, subtitle=sibtitle, list=list)

或者,您可以使用"\n".join(list)预先格式化列表,然后将其传递给普通模板字符串。

答案 2 :(得分:9)

python有很多模板引擎:JinjaCheetahGenshi etc。你不会犯任何错误。

答案 3 :(得分:0)

我不知道它是否简单,但Cheetah可能有所帮助。