使用Python CGI处理大型HTML文件
我有一个很大的 HTML 文件,叫做 exercise.html,我需要用 Python CGI 来生成一些东西。
我想问问你,打印这个 HTML 的最好方法是什么。
我知道可以用 print 方法,配合 %s、%i 等格式化方法来实现:
print '''<html>
<head><title>My first Python CGI app</title></head>
<body>
<p>Hello, 'world'!</p>
.
.
<div>%s</div>
.
.
</body>
</html>''' % generated_text
但是这个 HTML 文件真的很大,这样做是不是唯一的解决办法呢?
2 个回答
1
另外,可以考虑使用Python Bottle(简单模板引擎)。值得一提的是,bottle.py支持mako、jinja2和cheetah这几种模板。
其中,%符号表示Python代码,而{{var}}是用来替换的变量。
HTML:
<ul>
% for item in basket:
<li>{{item}}</li>
% end
</ul>
Python:
with open('index.html', 'r') as htmlFile:
return bottle.template(htmlFile.read(), basket=['item1', 'item2'])
2
你可以考虑使用像 Jinja2 这样的模板语言。
这里有一个简单的例子,直接来自上面的链接:
>>> from jinja2 import Template
>>> template = Template('Hello {{ name }}!')
>>> template.render(name='John Doe')
通常,你会把模板保存在一个文件里,然后加载和处理它们:
from jinja2 import Environment, PackageLoader
# The env object below finds templates that are lcated in the `templates`
# directory of your `yourapplication` package.
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
template = env.get_template('mytemplate.html')
print template.render(the='variables', go='here')
如上所示,模板允许你在其中放入 变量
。把文本放在 {{ }} 里面就变成了一个模板变量。当你渲染模板时,可以通过关键字参数传入变量的值。例如,下面的模板有一个名为 name 的变量,我们通过 template.render 来传递这个变量。
这是我的 {{name}}。
template.render(name='Jaime')