Domanda

Di recente ho scoperto il modulo genshi.builder. Mi ricorda il modulo Stan di Divmod Nevow. Come si usa genshi.builder.tag per creare un documento HTML con un particolare tipo di documento? O è anche una buona cosa da fare? In caso contrario, qual è il modo giusto ?

È stato utile?

Soluzione

Non è possibile creare un'intera pagina usando solo genshi.builder.tag - per inserire il doctype è necessario eseguire un intervento chirurgico sul flusso risultante. Inoltre, il codice risultante sembrerebbe orribile. Il modo consigliato di usare Genshi è usare un file modello separato, generare un flusso da esso e quindi renderizzarlo nel tipo di output desiderato.

genshi.builder.tag è utile soprattutto quando è necessario generare un markup semplice all'interno di Python, ad esempio quando si crea un modulo o si esegue una sorta di modifica logica della uscita.

Consulta la documentazione per:

Se vuoi davvero generare un documento completo usando solo builder.tag , questo codice (completamente non testato) potrebbe essere un buon punto di partenza:

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 pagina risultante non contiene spazi bianchi: sembrerà normale, ma avrai difficoltà a leggere il codice sorgente perché sarà interamente su una riga. L'implementazione di filtri appropriati per aggiungere spazi bianchi viene lasciata come esercizio al lettore.

Altri suggerimenti

Genshi.builder è per "generare in modo programmatico flussi di markup" [1]. Credo che lo scopo sia come backend per il linguaggio del modello. Probabilmente stai cercando il linguaggio di template per generare un'intera pagina.

Puoi, tuttavia, eseguire le seguenti operazioni:

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

Vedi altri Doctypes qui: http: // genshi. edgewall.org/wiki/ApiDocs/genshi.output#genshi.output:DocType

[1] genshi.builder.__doc__
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top