Невозможно создать целую страницу, используя только genshi.builder.tag
- вам нужно будет выполнить некоторые операции с результирующим потоком, чтобы вставить тип документа. Кроме того, полученный код будет выглядеть ужасно. Рекомендуемый способ использования Genshi - использовать отдельный файл шаблона, сгенерировать из него поток и затем отобразить этот поток в соответствии с желаемым типом вывода.
genshi.builder.tag
в основном полезен, когда вам нужно сгенерировать простую разметку из Python, например, когда вы создаете форму или делаете какую-то логически-сложную модификацию вывода.
См. Документацию для:
Если вы действительно хотите создать полный документ, используя только builder.tag
, этот (полностью непроверенный) код может быть хорошей отправной точкой:
from itertools import chain
from genshi.core import DOCTYPE, Stream
from genshi.output import DocType
from genshi.builder import tag as t
# Build the page using `genshi.builder.tag`
page = t.html (t.head (t.title ("Hello world!")), t.body (t.div ("Body text")))
# Convert the page element into a stream
stream = page.generate ()
# Chain the page stream with a stream containing only an HTML4 doctype declaration
stream = Stream (chain ([(DOCTYPE, DocType.get ('html4'), None)], stream))
# Convert the stream to text using the "html" renderer (could also be xml, xhtml, text, etc)
text = stream.render ('html')
Получившаяся страница не будет содержать пробелов - она будет выглядеть нормально, но вам будет трудно читать исходный код, потому что она будет целиком в одну строку. Применение соответствующих фильтров для добавления пробела оставлено читателю в качестве упражнения.