【问题标题】:Printing HTML in Python CGI在 Python CGI 中打印 HTML
【发布时间】:2011-03-11 07:58:11
【问题描述】:

我一直在自学 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 中显示(它有几行代码和 sone JS),我是否必须在每行前面手动添加“打印”并转"s into \" 等?或者有没有可以为我转换的方法或脚本?

谢谢!

【问题讨论】:

    标签: python html cgi printing


    【解决方案1】:

    Python 支持多行字符串,因此您可以将文本打印在一个大摘要中。

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

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

    【讨论】:

    • 所以我可以像这样复制和粘贴任何 HTML 吗?我不必在每个 " 之前添加 / 吗?
    • 对于多行字符串,只有打开字符串的同一个三引号序列才能关闭它。
    • Ignacio,你为我节省了数小时不必要的“打印”标签和引号。谢谢!
    • 您遗漏了内容类型
    • @bharal:我的回答是针对处理 HTML 输出而不是提供完整的 CGI 脚本。
    【解决方案2】:

    如果那个大的 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()
    

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

    【讨论】:

    • 谢谢亚历克斯,非常感谢!
    • 如果 foo.html 必须在 cgi-bin 中,如果那是脚本所在的位置?
    • @Parker:例如,是的。但如果文件在其他地方,您可以在打开文件时指定路径。
    • @Parker,是的,完全在同一个目录中(对于我发布的代码;否则你必须知道并给出文件的完整路径,而不仅仅是名称) .
    【解决方案3】:

    当我第一次尝试使用装饰器时,我写了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 服务器的 do_GETdo_POST 方法调用 say_hello

    【讨论】:

      【解决方案4】:

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

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

      等等!

      【讨论】:

        猜你喜欢
        • 2017-03-19
        • 2017-12-27
        • 2014-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-18
        • 2013-12-30
        • 1970-01-01
        相关资源
        最近更新 更多