Beheben eines relativen Pfad von py: passen in eine genshi Vorlage
-
06-07-2019 - |
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
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.