2010-07-03 6 views
2

Я преподаю себе питона и CGI скриптов, и я знаю, что ваш основной сценарий выглядитПечать HTML в 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 в» и т. д.? Или есть метод или сценарий, который мог бы преобразовать его для меня?

Спасибо!

ответ

8

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

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

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

+0

Так что я могу скопировать и вставить любой HTML-код? Не нужно добавлять/перед каждым "? – Parker

+0

С многострочными строками только одна и та же тройная кавычка, которая открывала строку, может закрыть ее. –

+0

Игнасио, вы избавили меня от лишних« печатных »тегов и кавычек. Спасибо! – Parker

9

Если большой 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

Спасибо Алекс, высоко оценил! – Parker

+0

Значит, foo.html должен быть в cgi-bin, если это где сценарий? – Parker

+0

@Parker: Для примера, да. Но вы можете указать путь при открытии файла, если он где-то еще. –

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> 

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