代码之家  ›  专栏  ›  技术社区  ›  Chris Boyle

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

  •  0
  • Chris Boyle  · 技术社区  · 17 年前
    <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 贴上标签,就像 其他标记上的属性。

    或者,哪个文件包含py:match块?这不太好,因为它可能位于与具有 标签

    更糟糕的是:我可以从Genshi外部提供我正在呈现的文件的路径作为上下文参数,但它可能位于与上述两个不同的目录中。

    1 回复  |  直到 17 年前
        1
  •  1
  •   user8472    16 年前

    foo 标签否则,您需要将相对路径(即,如何从读卡器运行的目录到正在读取的文件的目录)作为上下文参数传递给Python代码,并将其添加到 os.path.join

    通过此设置(并使用MacOS X 10.6.3上通过Fink软件包Genshi-py26安装的Genshi 0.6),命令 os.getcwd() 返回包含

    对于这种复杂的路径构造,我也强烈建议使用 path=os.path.normpath(path) ,因为您可能不希望这些东西在生成的HTML代码中泄漏。