0
<py:match path="foo">
    <?python
        import os
        href = select('@href').render()
        SOMEWHERE = ...  # what file contained the foo tag?
        path = os.path.abspath(os.path.join(os.path.dirname(SOMEWHERE), href)
        f = file(path,'r')
        # (do something interesting with f)
    ?>
</py:match>
...
<foo href="../path/relative/to/this/template/abcd.xyz"/>

上記の「どこか」とは何ですか?その属性は、他のタグの属性のようにhref、タグが含まれるファイルに相対的である必要があります。foohref

または、py:match ブロックが含まれているファイルはどれですか? fooタグ付きのファイルとは別のディレクトリにある可能性があるため、これはあまり良くありません。

さらに悪いことに、レンダリングしているファイルのパスを Genshi の外部からコンテキスト引数として指定することもできますが、それは上記の両方とは異なるディレクトリにある可能性があります。

4

1 に答える 1

1

ドライバー プログラム (つまり、入力ファイルを解析する Python プログラム) がfooタグを含むファイルのディレクトリで実行されていることを確認する必要があります。それ以外の場合は、Python コードへのコンテキスト引数として相対パス (つまり、リーダーが実行されるディレクトリから読み取られるファイルのディレクトリへの移動方法) を渡し、それをos.path.joinコマンドに追加する必要があります。

このセットアップ (および Fink パッケージ genshi-py26 を介して MacOS X 10.6.3 にインストールされた Genshi 0.6 を使用) では、コマンドはタグos.getcwd()を含むファイルの現在の作業ディレクトリを返します。foo

このような複雑なパス構成については、 を使用することを強くお勧めしpath=os.path.normpath(path)ます。これは、結果の HTML コードにそのようなものが漏れることを望まない場合があるためです。

于 2010-05-20T16:09:39.997 に答える