<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
属性のように、そのファイル内のfoo
タグを持つファイルからの相対的な値をhref
にします。genshiテンプレートのpy:matchからの相対パスの解決
また、どのファイルにpy:matchブロックが含まれていますか?これは、foo
タグを持つファイルとは別のディレクトリにある可能性があるため、あまり良くありません。
私はレンダリングしているファイルのパスをGenshiの外部からのコンテキスト引数として与えることができますが、それは上記の両方とは別のディレクトリにある可能性があります。
xi:include href = "B/C/D"があり、Dにxi:include href =があるファイルAでGenshiを実行する可能性がありますが、 "../E"など、私が本当にやりたいことは、GenshiからEまたはFの場所の知識を抽出することです...これはおそらくGenshiにパッチを当てることを伴うでしょう。それが起こると、私は質問をしてからRailsに切り替えました。 :-) –
ああ、そうだ。 'foo'タグをつけたファイルがメインファイルだった場合、上記の解決策が実際に問題を解決するでしょう(何らかの理由で私はこのシナリオを暗黙的に想定していましたが、本当にあなたの質問に従っていません!これがメインファイルに含まれている別のファイルであった場合、ドライバプログラムはその場所と原点について知ることができず、正しいパスを含めることができませんでした。その場合、私は問題の解決策がありません(確かに実現不可能な、自分自身の場所についての情報をすべての*ファイルの先頭に明示的なグローバル定数があることを除いて)。 – user8472
私はすでにPythonをしばらく使用していたので、Genshiを使っています。これまでRubyを学んでいたことはありませんでしたが、Railsが実際に始めるには良い理由があると聞いてきました。^) – user8472