2010-03-31 6 views
0

Pour des raisons de performance comme suggéré here, j'étudie comment utiliser le modèle pr-compilé.Guépard pré-compilé utilisation du modèle

je modifier hello.tmpl dans le répertoire de modèle comme

#attr title = "This is my Template" 
<html> 
    <head> 
     <title>\${title}</title> 
    </head> 
    <body> 
     Hello \${who}! 
    </body> 
</html> 

alors émis cheetah-compile.exe .\hello.tmpl et obtenir le hello.py

Dans un autre fichier python runner.py, j'ai:

#!/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() 

Mais le résultat est

<html> 
    <head> 
     <title>${title}</title> 
    </head> 
    <body> 
     Hello ${who}! 
    </body> 
</html> 

Debugging pendant un certain temps, je trouve que l'intérieur 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() 

il semble que le trans est None, donc il va DummyTransaction, qu'est-ce que je manque ici? Des suggestions pour résoudre ce problème?

Répondre

0

Votre principal problème est que, dans l'intérieur runner.py myMethod() au lieu de

print tmpl 

Vous devez

print results 

De plus, votre code a quelques problèmes de mise en forme:

  1. n » t échapper le $ {title} avec une barre oblique inverse
  2. vous avez besoin if __name__ == '__main__': au lieu de if name == 'main':
Questions connexes