5

最近、genshi.builder モジュールを発見しました。Divmod Nevow の Stan モジュールを思い出します。genshi.builder.tag を使用して、特定の doctype で HTML ドキュメントを作成するにはどうすればよいでしょうか? それとも、これは良いことですか?そうでない場合、正しい方法は何ですか?

4

2 に答える 2

6

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 行になるため、ソース コードを読むのに苦労することになります。空白を追加するための適切なフィルターの実装は、読者の課題として残されています。

于 2008-09-22T02:12:07.880 に答える
3

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__
于 2008-09-22T00:29:34.727 に答える