Frage

<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"/>

Was als „irgendwo“ gehen sollte oben? Ich möchte, dass href Attribut auf die Datei mit dem foo Tag in relativ sein, wie href auf andere Tags Attribute.

Alternativ welche Datei enthielt die py: Match-Block? Dies ist weniger gut, weil es in einem anderen Verzeichnis aus der Datei mit dem foo Tag sein kann.

Noch weniger gut. Ich konnte den Pfad der Datei Zufuhr von außen Genshi ich als Kontext Argument Rendering, aber das in einem anderen Verzeichnis aus beiden oben sein könnte

War es hilfreich?

Lösung

Sie müssen sicherstellen, dass das Treiberprogramm (das heißt, das Python-Programm, das die Eingabedatei analysiert) läuft in dem Verzeichnis der Datei mit dem foo-Tag. Andernfalls müssen Sie den relativen Pfad überliefern (dh, wie aus dem Verzeichnis erhalten, in dem der Leser in das Verzeichnis der Datei ausgeführt wird gelesen werden) als Kontext Argument zu Ihrem Python-Code und fügen Sie es den os.path.join Befehl.

Mit diesem Setup (und Verwenden Genshi 0.6 installiert auf MacOS X 10.6.3 über das Fink-Paket genshi-py26) der Befehl os.getcwd() gibt das aktuelle Arbeitsverzeichnis der Datei mit dem foo-Tag enthält.

Für solche komplizierten Weg Konstrukte Ich empfehle path=os.path.normpath(path) auch stark verwenden, da Sie solche Dinge nicht wünschen können in Ihrem resultierenden HTML-Code zu lecken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top