使用Python CGI处理大型HTML文件

2 投票
2 回答
1674 浏览
提问于 2025-04-18 06:31

我有一个很大的 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')

撰写回答