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

StackOverflow https://stackoverflow.com/questions/112564

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

На полученной странице не будет пробелов — она будет выглядеть нормально, но вам будет сложно читать исходный код, поскольку он будет целиком состоять из одной строки.Реализация соответствующих фильтров для добавления пробелов оставлена ​​читателю в качестве упражнения.

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

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')

Другие типы документов смотрите здесь: http://genshi.edgewall.org/wiki/ApiDocs/genshi.output#genshi.output:DocType

[1] genshi.builder.__doc__
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top