在Python CGI中打印HTML

时间:2010-07-03 00:12:51

标签: python html cgi printing

我一直在教自己python和cgi脚本,我知道你的基本脚本看起来像

#!/usr/local/bin/python
import cgi
print "Content-type: text/html"
print 
print "<HTML>"
print  "<BODY>"
print "HELLO WORLD!"
print "</BODY>"
print "</HTML>"

我的问题是,如果我有一个大的HTML文件,我想在python中显示(它有代码行和代码行,并且里面有JS)我是否必须在每行前面手动添加'print'并转向“进入”等等?或者是否有可以为我转换它的方法或脚本?

谢谢!

4 个答案:

答案 0 :(得分:10)

如果调用那个大的html文件(例如)'foo.html'并且它存在于CGI脚本的当前目录中,那么你需要的只是脚本的主体:

print "Content-type: text/html"
print
with open('foo.html') as f:
  print f.read()

如果您遇到Python 2.5,请添加from __future__ import with_statement作为模块正文的开头。如果您遇到更旧的Python,请将最后两行更改为

print open('foo.html').read()

请注意,当您不使用import cgi模块的任何功能时,您不需要cgi,这在您的示例和此答案中都是如此。

答案 1 :(得分:10)

Python支持多行字符串,因此您可以将文本打印出来。

print '''<html>
<head><title>My first Python CGI app</title></head>
<body>
<p>Hello, 'world'!</p>
</body>
</html>'''

它们支持所有字符串操作,包括方法(.upper().translate()等)和格式化(%),以及原始模式(r前缀)和u unicode前缀。

答案 2 :(得分:0)

当我第一次尝试使用装饰器时,我写了this little CGI decorator来处理HTML头部和正文标签样板文件。所以你可以写:

@CGImethod(title="Hello with Decorator")
def say_hello():
    print '<h1>Hello from CGI-Land</h1>'

当被调用时返回:

Content-Type: text/html

<HTML>
<HEAD><TITLE>Hello with Decorator</TITLE></HEAD>
<BODY>
<h1>Hello from CGI-Land</h1>

</BODY></HTML>

然后可以从HTTP服务器的say_hellodo_GET方法调用do_POST

答案 3 :(得分:0)

Python支持多行字符串。因此,您只需复制HTML代码并将其粘贴到引号中即可。

print ("<html>
<head>
<title>
</title>
</head>
</html>")

以此类推!