Использование предварительно скомпилированного шаблона Cheetah - PullRequest
0 голосов
/ 31 марта 2010

По соображениям производительности, как предложено здесь , я изучаю, как использовать шаблон, скомпилированный 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()

похоже, что trans is None, поэтому он переходит к DummyTransaction, что я здесь пропустил? Есть предложения, как это исправить?

1 Ответ

0 голосов
/ 01 апреля 2010

Ваша главная проблема в том, что в runner.py внутри myMethod() вместо

print tmpl

Вам нужно

print results

Кроме того, у вашего кода есть некоторые проблемы с форматированием:

  1. не экранируйте $ {title} обратной косой чертой
  2. вам нужно if __name__ == '__main__': вместо if name == 'main':
...