在genshi模板中解析py:match的相对路径

时间:2009-06-21 18:28:47

标签: python relative-path genshi

<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外部呈现为上下文参数的文件的路径,但这可能与上述两个目录不同。

1 个答案:

答案 0 :(得分:1)

您需要确保驱动程序(即解析输入文件的Python程序)在包含foo标记的文件的目录中运行。否则,您需要将相对路径(即,如何从读取器运行的目录中获取到正在读取的文件的目录)作为Python代码的上下文参数传递,并将其添加到{{1} }命令。

通过此设置(并通过Fink软件包genshi-py26在MacOS X 10.6.3上安装Genshi 0.6),命令os.path.join将返回包含os.getcwd()标记的文件的当前工作目录。

对于这种复杂的路径构造,我还强烈建议使用foo,因为您可能不希望在生成的HTML代码中泄露此类内容。