<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 se passer comme "quelque part" ci-dessus? Je veux que l'attribut href
soit relatif au fichier avec l'étiquette foo
, comme les attributs href
sur d'autres étiquettes.Résolution d'un chemin relatif à partir de py: correspondance dans un gabarit genshi
Sinon, quel fichier contenait le bloc py: match? C'est moins bon, car il peut être dans un répertoire différent du fichier avec la balise foo
.
Encore moins bon: je pourrais fournir le chemin du fichier que je rends en tant qu'argument de contexte de l'extérieur de Genshi, mais cela pourrait être dans un répertoire différent des deux ci-dessus.
Utile pour certaines personnes que j'attendais, mais pas tout à fait ce que je recherchais: mon code peut lancer Genshi sur le fichier A, qui a xi: inclure href = "B/C/D", et D a xi: include href = "../E", etc., ce que je voulais vraiment faire est d'extraire de Genshi la connaissance de l'emplacement de E ou F ... cela impliquerait probablement de patcher Genshi. Bien que, en fait, je suis passé à Rails depuis la pose de la question. :-) –
Oh, je vois. Si le fichier avec la balise 'foo' était le fichier principal alors la solution ci-dessus résoudrait en effet le problème (pour une raison quelconque, j'ai implicitement supposé ce scénario, mais il ne résulte pas de votre question - désolé à ce sujet!). S'il s'agissait encore d'un autre fichier inclus dans le fichier principal, le programme du pilote ne pouvait pas connaître son emplacement et son origine et ne pouvait pas inclure le chemin correct. Dans ce cas, je n'ai pas de solution au problème (sauf avoir une constante globale explicite au début de * chaque * fichier qui informe sur son propre emplacement - certainement pas réalisable). – user8472
J'utilise toujours Genshi depuis que j'avais déjà utilisé Python pendant un certain temps. Je n'ai pas pris la peine d'apprendre Ruby jusqu'ici, mais d'après tout ce que j'ai entendu Rails pourrait bien être une bonne raison de commencer: ^) – user8472