Je travaille sur une application cherrypy + guépard et souhaite améliorer l'expérience de développement.Cheetah avec CherryPy: comment charger des modèles de base, et le faire automatiquement sur le changement au cours du développement
J'ai tout fonctionne manuellement quand je compile des modèles au préalable. (Mise à jour: Voici comment les choses fonctionnent pour la production: précompiler, ne pas expédier * .tmpl et charger les modèles comme des modules python réguliers.) Cependant, au cours du développement, je préfère simplement charger les modèles chaque fois qu'ils sont référencés. pas besoin de tuer et de redémarrer mon application. J'ai quelques problèmes auxquels je suis confronté:
- Si j'ai des modèles héritant de modèles de base, j'obtiens des erreurs d'importation (impossible de trouver des modèles de base). Je pense que cela a fonctionné pendant mes expériences, mais malheureusement je ne l'ai pas sauvé et maintenant je ne peux pas le faire fonctionner.
- Supposons que je reçois 1. travail, comment les faire en sorte que les modifications même dans les modèles de base sont repris sans redémarrage.
Ci-dessous mon exemple d'application qui devrait démontrer les problèmes. La structure du répertoire est la suivante:
t.py
templates/
base.tmpl
index.tmpl
t.py:
import sys
import cherrypy
from Cheetah.Template import Template
class T:
def __init__(self, foo):
self.foo = foo
@cherrypy.expose
def index(self):
return Template(file='templates/index.tmpl',
searchList=[{'foo': self.foo}]).respond()
cherrypy.quickstart(T(sys.argv[1]))
base.tmpl:
#def body
This is the body from the base
#end def
This is the base doc
index.tmpl:
#from templates.base import base
#extends base
#def body
$base.body(self)
This is the extended body
#end def
This is from index
Exécuter comme ceci:
python t.py Something
Cela fonctionne pour le développement, mais des ruptures dans la production. Pour la production, les modèles sont précompilés et utilisés en les important en tant que modules Python standard. Il n'y aura pas de fichiers * .tmpl en production. –