Printing HTML in Python CGI

泄露秘密 提交于 2019-11-29 08:46:17

Python supports multiline strings, so you can print out your text in one big blurb.

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

They support all string operations, including methods (.upper(), .translate(), etc.) and formatting (%), as well as raw mode (r prefix) and the u unicode prefix.

If that big html file is called (for example) 'foo.html' and lives in the current directory for your CGI script, then all you need as your script's body is:

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

If you're stuck with Python 2.5, add from __future__ import with_statement as the start of your module's body. If you're stuck with an even older Python, change the last two lines into

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

Note that you don't need to import cgi when you're using none of the functionality of the cgi module, which is the case both in your example and in this answer.

When I was first experimenting with decorators, I wrote this little CGI decorator to handle the HTML head and body tag boilerplate stuff. So that you can just write:

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

which when called returns:

Content-Type: text/html

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

</BODY></HTML>

Then say_hello could be called from your HTTP server's do_GET or do_POST methods.

Python supports multiline string. So you can just copy your HTML code and paste it into the quotations.

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

and so on!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!