Печать HTML в Python CGI - PullRequest
       6

Печать HTML в Python CGI

2 голосов
/ 03 июля 2010

Я учил себя написанию скриптов на 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» перед каждой строкой и превращать «s в \» и т. д.?Или есть метод или сценарий, который может преобразовать его для меня?

Спасибо!

Ответы [ 3 ]

10 голосов
/ 03 июля 2010

Python поддерживает многострочные строки, поэтому вы можете распечатать текст одним большим всплывающим знаком.

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

Они поддерживают все строковые операции, включая методы (.upper(), .translate() и т. Д.) И форматирование (%), а также режим raw (префикс r) и префикс u unicode.

10 голосов
/ 03 июля 2010

Если этот большой 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, что имеет место как в вашем примере, так и в этом ответе.

0 голосов
/ 03 июля 2010

Когда я впервые экспериментировал с декораторами, я написал этот маленький CGI-декоратор для работы с шаблонами 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>

Тогда say_hello может быть вызвано из методов do_GET или do_POST вашего HTTP-сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...