最近、genshi.builder モジュールを発見しました。Divmod Nevow の Stan モジュールを思い出します。genshi.builder.tag を使用して、特定の doctype で HTML ドキュメントを作成するにはどうすればよいでしょうか? それとも、これは良いことですか?そうでない場合、正しい方法は何ですか?
2 に答える
just を使用してページ全体を構築することはできません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')
結果のページには空白がなくなります。見た目は正常ですが、ソース コード全体が 1 行になるため、ソース コードを読むのに苦労することになります。空白を追加するための適切なフィルターの実装は、読者の課題として残されています。
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__