





Genshi.builder предназначен для «программного создания потоков разметки» [1]. Я считаю, что он предназначен для поддержки языка шаблонов. Вероятно, вы ищете язык шаблонов для создания целой страницы.
Однако вы можете сделать следующее:
>>> import genshi.output
>>> genshi.output.DocType('html')
('html', '-//W3C//DTD HTML 4.01//EN', 'http://www.w3.org/TR/html4/strict.dtd')
Смотрите другие Doctypes здесь: http://genshi.edgewall.org/wiki/ApiDocs/genshi.output#genshi.output:DocType
[1] genshi.builder.__doc__
Невозможно построить всю страницу, используя только genshi.builder.tag - вам нужно будет выполнить некоторые операции с результирующим потоком, чтобы вставить doctype. Кроме того, полученный код выглядел бы ужасно. Рекомендуемый способ использования 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')
На полученной странице не будет пробелов - она будет выглядеть нормально, но вам будет сложно читать исходный код, потому что он будет целиком в одной строке. Реализация соответствующих фильтров для добавления пробелов оставлена читателю в качестве упражнения.
это имеет смысл. звучит как что-то, что вы могли бы использовать для создания фрагмента html для загрузки на страницу с помощью ajax или чего-то еще?
Даже для небольших страниц AJAX я предпочитаю шаблоны, потому что они имеют тенденцию быть простой логикой и подстановкой параметров «при входе в систему, показывать имя». builder.tag предназначен для случаев, когда есть что-то действительно сложное, что я не могу понять, как красиво написать с помощью шаблона.
есть ли способ создать html-документ с помощью genshi? я ищу что-то похожее на стан. Если это не подходящее использование genshi, это нормально, но я хотел бы знать, так ли это.