Pregunta

Recientemente descubrí el módulo genshi.builder.Me recuerda al módulo Stan de Divmod Nevow.¿Cómo se usaría genshi.builder.tag para crear un documento HTML con un tipo de documento en particular?¿O es incluso algo bueno que hacer?Si no, ¿cuál es el bien ¿forma?

¿Fue útil?

Solución

No es posible crear una página completa usando solo genshi.builder.tag -- necesitaría realizar alguna cirugía en la secuencia resultante para insertar el tipo de documento.Además, el código resultante tendría un aspecto horrible.La forma recomendada de usar Genshi es usar un archivo de plantilla separado, generar una secuencia a partir de él y luego renderizar esa secuencia al tipo de salida que desee.

genshi.builder.tag es especialmente útil cuando necesitas generar un marcado simple desde Python, como cuando estás creando un formulario o haciendo algún tipo de modificación lógica de la salida.

Ver documentación para:

Si realmente desea generar un documento completo utilizando sólo builder.tag, este código (completamente no probado) podría ser un buen punto de partida:

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

La página resultante no tendrá espacios en blanco; se verá normal, pero le resultará difícil leer el código fuente porque estará completamente en una línea.La implementación de filtros apropiados para agregar espacios en blanco se deja como ejercicio para el lector.

Otros consejos

Genshi.builder es para "generar flujos de marcado mediante programación"[1].Creo que su propósito es servir de backend para el lenguaje de plantillas.Probablemente esté buscando el lenguaje de plantilla para generar una página completa.

Sin embargo, puedes hacer lo siguiente:

>>> import genshi.output
>>> genshi.output.DocType('html')
('html', '-//W3C//DTD HTML 4.01//EN', 'http://www.w3.org/TR/html4/strict.dtd')

Vea otros tipos de documentos aquí: http://genshi.edgewall.org/wiki/ApiDocs/genshi.output#genshi.output:DocType

[1] genshi.builder.__doc__
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top