Использование предварительно скомпилированного шаблона Cheetah
Из соображений производительности, как предлагается здесь, я изучаю, как использовать шаблон, скомпилированный pr.
Я редактирую hello.tmpl
в каталоге шаблонов как
#attr title = "This is my Template"
<html>
<head>
<title>\${title}</title>
</head>
<body>
Hello \${who}!
</body>
</html>
затем выдан cheetah-compile.exe .\hello.tmpl
и получить hello.py
В другом файле Python runner.py
, Я имею:
#!/usr/bin/env python
from Cheetah.Template import Template
from template import hello
def myMethod():
tmpl = hello.hello(searchList=[{'who' : 'world'}])
results = tmpl.respond()
print tmpl
if __name__ == '__main__':
myMethod()
Но результат
<html>
<head>
<title>${title}</title>
</head>
<body>
Hello ${who}!
</body>
</html>
Отладка на некоторое время, я обнаружил, что внутри hello.py
:
def respond(self, trans=None):
## CHEETAH: main method generated for this template
if (not trans and not self._CHEETAH__isBuffering and not callable(self.transaction)):
trans = self.transaction # is None unless self.awake() was called
if not trans:
trans = DummyTransaction()
похоже транс не None, так что идет к DummyTransaction
что я здесь пропустил? Есть предложения как это исправить?
1 ответ
Ваша главная проблема в том, что внутри runner.py внутри myMethod()
вместо
print tmpl
Тебе нужно
print results
Кроме того, у вашего кода есть некоторые проблемы с форматированием:
- не избегайте ${title} с обратной косой чертой
- тебе нужно
if __name__ == '__main__':
вместоif name == 'main':