Как использовать genshi.builder для программного создания HTML-документа?

Недавно я обнаружил модуль genshi.builder. Это напоминает мне стандартный модуль Divmod Nevow. Как можно использовать genshi.builder.tag для создания HTML-документа с определенным типом документа? Или это вообще хорошо? Если нет, то какой путь верно?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
1 537
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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__

есть ли способ создать html-документ с помощью genshi? я ищу что-то похожее на стан. Если это не подходящее использование genshi, это нормально, но я хотел бы знать, так ли это.

Jeremy Cantrell 22.09.2008 05:21
Ответ принят как подходящий

Невозможно построить всю страницу, используя только 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 или чего-то еще?

Jeremy Cantrell 22.09.2008 06:22

Даже для небольших страниц AJAX я предпочитаю шаблоны, потому что они имеют тенденцию быть простой логикой и подстановкой параметров «при входе в систему, показывать имя». builder.tag предназначен для случаев, когда есть что-то действительно сложное, что я не могу понять, как красиво написать с помощью шаблона.

John Millikin 22.09.2008 06:30

Другие вопросы по теме