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

有帮助吗?

解决方案

您需要确保驱动程序(即解析输入文件的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