<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
, например href
атрибутов в других тегах.Устранение относительного пути от py: совпадение в шаблоне genshi
В качестве альтернативы, какой файл содержит блок py: match? Это не так хорошо, потому что он может находиться в другом каталоге из файла с тегом foo
.
Еще менее хорошо: я мог бы предоставить путь к файлу, который я представляю как аргумент контекста из-за пределов Genshi, но это может быть в другом каталоге из обоих вышеперечисленных.
Полезно некоторым людям, которых я ожидаю, но не совсем то, что мне было: мой код может запускать Genshi в файле A, который имеет xi: include href = "B/C/D", а D имеет xi: include href = «../E» и т. Д., То, что я действительно хотел сделать, - извлечь из Генши знания о местонахождении E или F ... это, вероятно, связано с исправлением Генши. Хотя, как бы то ни было, я переключился на Rails, задав вопрос. :-) –
О, я вижу. Если файл с тегом 'foo' был основным файлом, то вышеупомянутое решение действительно решило бы проблему (по какой-то причине я неявно предполагал этот сценарий, но он действительно не вытекает из вашего вопроса - извините!). Если это был еще один файл, включенный в основной файл, программа драйвера не могла знать о ее местоположении и происхождении и не могла включить правильный путь. В этом случае у меня нет решения проблемы (за исключением наличия явной глобальной константы в начале * каждого * файла, который информирует о своем местоположении, что, безусловно, не представляется возможным). – user8472
Я все еще использую Genshi, так как я уже использовал Python в течение некоторого времени. Пока не удосужился узнать Ruby, но из всего, что я слышал, Rails действительно может быть хорошей причиной для начала: ^) – user8472