我是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
加载文本,但还没有找到办法。我该怎么办?
答案 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()
但我个人更喜欢明确结束的长版本: - )