<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
属性。
或者,什么文件包含py:match块?这不太好,因为它可能与具有foo
标记的文件位于不同的目录中。
更不好:我可以提供我从Genshi外部呈现为上下文参数的文件的路径,但这可能与上述两个目录不同。
答案 0 :(得分:1)
您需要确保驱动程序(即解析输入文件的Python程序)在包含foo
标记的文件的目录中运行。否则,您需要将相对路径(即,如何从读取器运行的目录中获取到正在读取的文件的目录)作为Python代码的上下文参数传递,并将其添加到{{1} }命令。
通过此设置(并通过Fink软件包genshi-py26在MacOS X 10.6.3上安装Genshi 0.6),命令os.path.join
将返回包含os.getcwd()
标记的文件的当前工作目录。
对于这种复杂的路径构造,我还强烈建议使用foo
,因为您可能不希望在生成的HTML代码中泄露此类内容。