从文件加载mako模板

时间:2010-08-19 12:14:54

标签: python templates mako

我是python的新手,目前正在尝试使用mako模板。 我希望能够获取一个html文件,并从另一个html文件中添加一个模板。 假设我收到了这个index.html文件:

<html>
<head>
  <title>Hello</title>
</head>
<body>    
    <p>Hello, ${name}!</p>
</body>
</html>

和此name.html文件:

world

(是的,它里面只有世界一词)。 我希望${name}中的index.html替换为name.html文件的内容。 我已经能够在没有name.html文件的情况下执行此操作,方法是使用以下代码在render方法中声明名称:

@route(':filename')
def static_file(filename):    
    mylookup = TemplateLookup(directories=['html'])
    mytemplate = mylookup.get_template('hello/index.html')
    return mytemplate.render(name='world')

这对于较大的文本片段显然没有用。现在我想要的只是从name.html加载文本,但还没有找到办法。我该怎么办?

3 个答案:

答案 0 :(得分:2)

return mytemplate.render(name=open(<path-to-file>).read())

答案 1 :(得分:2)

感谢您的回复 我的想法是使用mako框架,因为它执行缓存等操作并检查文件是否已更新...

这段代码似乎最终有效:

@route(':filename')
def static_file(filename):    
    mylookup = TemplateLookup(directories=['.'])
    mytemplate = mylookup.get_template('index.html')
    temp = mylookup.get_template('name.html').render()
    return mytemplate.render(name=temp)

再次感谢。

答案 2 :(得分:1)

我是否正确理解您所需要的是从文件中读取内容?如果你想阅读完整的内容,请使用类似的东西(Python&gt; = 2.5):

from __future__ import with_statement

with open(my_file_name, 'r') as fp:
    content = fp.read()

注意: from __future__行必须是.py文件中的第一行(或者可以放在第一行的内容编码规范之后)

或旧方法:

fp = open(my_file_name, 'r')
try:
    content = fp.read()
finally:
    fp.close()

如果您的文件包含非ascii字符,您还应该查看编解码器页面: - )

然后,根据您的示例,最后一部分可能如下所示:

from __future__ import with_statement

@route(':filename')
def static_file(filename):    
    mylookup = TemplateLookup(directories=['html'])
    mytemplate = mylookup.get_template('hello/index.html')
    content = ''
    with open('name.html', 'r') as fp:
        content = fp.read()
    return mytemplate.render(name=content)

您可以在官方文档中找到有关file object的更多详细信息: - )

还有一个快捷版本:

content = open('name.html').read()

但我个人更喜欢明确结束的长版本: - )