Question

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

Qu'est-ce qui devrait être considéré comme "quelque part"? au dessus de? Je souhaite que l'attribut href soit relatif au fichier contenant la balise foo , comme les attributs href des autres balises.

Sinon, quel fichier contenait le bloc py: match? Ceci est moins bon car il peut se trouver dans un répertoire différent du fichier portant la balise foo .

Encore moins bon: je pourrais fournir le chemin du fichier que je suis en train de restituer en tant qu'argument de contexte extérieur à Genshi, mais il se peut que ce soit dans un répertoire différent de celui mentionné ci-dessus.

Était-ce utile?

La solution

Vous devez vous assurer que le programme du pilote (c'est-à-dire le programme Python qui analyse le fichier d'entrée) est exécuté dans le répertoire du fichier contenant la balise foo . Sinon, vous devez indiquer le chemin relatif (c.-à-d. Comment accéder au répertoire dans lequel le lecteur s'exécute dans le répertoire du fichier en cours de lecture) en tant qu'argument de contexte de votre code Python et l'ajouter à l'OS . .path.join commande.

Avec cette configuration (et avec Genshi 0.6 installé sur MacOS X 10.6.3 via le paquet Fink, genshi-py26), la commande os.getcwd () renvoie le répertoire de travail actuel du fichier contenant le balise foo .

Pour des constructions de chemin aussi compliquées, je vous recommande également fortement d'utiliser path = os.path.normpath (chemin) , car vous ne voudrez peut-être pas que de telles choses se glissent dans le code HTML résultant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top