質問

<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"/>

&quot; somewhere&quot;として何をすべきか上? href 属性は、他のタグの href 属性のように、 foo タグが含まれるファイルに対して相対的である必要があります。

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

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

役に立ちましたか?

解決

ドライバープログラム(入力ファイルを解析する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コードでそのようなものがリークすることを望まないためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top