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属性与其中包含foo标签的文件相关,就像href其他标签上的属性一样。

或者,哪个文件包含 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 回答