Автоматическая компиляция родительских шаблонов - PullRequest
3 голосов
/ 09 февраля 2012

Я пытаюсь настроить динамическую компиляцию шаблонов Cheetah, полезных для разработки (поэтому мне не нужно перекомпилировать их с cheetah compile после каждого изменения). Похоже, Cheetah.Template.Template правильный API для этого, но он просто не обрабатывает родительские шаблоны.

Так что, если у меня есть:

 -- __init__.py
 -- index.tmpl:
    #extends layout.A
 -- layout/
          -- __init__.py
          -- A.tmpl:
          #echo 'Hello!'

Если бы я запустил Python в корневом каталоге, я получил бы следующее:

>>> from Cheetah.Template import Template; t = Template(file='index.tmpl')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.6/site-packages/Cheetah-2.4.3-py2.6-freebsd-7-amd64.egg/Cheetah/Template.py", line 1259, in __init__
    self._compile(source, file, compilerSettings=compilerSettings)
  ...
  ImportError: No module named A

Если я скомпилирую A.tmpl с cheetah compile, ошибка исчезнет, ​​но изменения в шаблоне не влияют на результат компиляции index.tmpl:

$ cat layout/A.tmpl
#echo 'Hello, world!'

$ python
>>> from Cheetah.Template import Template; t = Template(file='index.tmpl')
>>> str(t)
'Hello!'

Должен ли я самостоятельно перекомпилировать все родительские шаблоны (например, как это делает Aquarium framework)?

Гепард версия 2.4.

Любые советы по интеграции Django1.3 \ Cheetah также приветствуются.

1 Ответ

2 голосов
/ 14 марта 2012

Некоторые из тех, которые находятся на ранней стадии запуска вашего процесса, включают следующие две строки:

import Cheetah.ImportHooks 
Cheetah.ImportHooks.install() 

Я верю, что это даст вам поведение, которое вы ищете.

Это не задокументировано в основных документах, но Тавис Радд предложил это в ответ на аналогичный вопрос в списке рассылки Cheetah .

...