L’agrégateur compile les données venant du serveur de commande ainsi que le template. Dans un premier temps, il récupère un dictionnaire contenant les variables à passer au template, le nom du template et le nom des modules inclues dans le template:
result = urllib.unquote(result)
content = eval(result)
# les données annexes
data = content['data']
# le template lié à l'action
template = content['template']
# récupération des modules de templatisation (creation d'élément de formulaire...)
plugins = data['templates']
On commence par charger et écrire les modules complémentaires:
content_plug = proxy.get_template(plugin, magic_nb)[1]
write_template(plugin, content_plug)
On les compile:
compile_template(plugin)
La compilation produit des fichiers .py qui sont donc importables depuis le pythonpath et donc dans un template.
Note
Si vous travaillez sur des modifications sur les modules, il faudra redémarrer le service ead-web, cd qui n’est pas nécessaire dans le cas de template.
Si le template n’est pas téléchargé dans le répertoire temporaire de l’:term:agrégateur, on va le chercher auprès du serveur de commande:
code, content_template = proxy.get_template(template, magic_nb)
Note
Si vous travaillez sur des templates (dans /usr/share/ead/backend/template/ du backend), il faut supprimer les références les versions téléchargées auprès de l’:term:agrégateur.
Une fois toute les données récoltés, on peut templatiser:
res = instanciate_template(template, content)
On passe des paramètres à la templatisation:
class CheetahTemplate(ChtTemplate):
"""personnalise et facilite la construction
du template Cheetah
"""
def __init__(self, filename, context):
self.context = context
builtins = {}
ChtTemplate.__init__(self, file=filename, searchList=[context, builtins, {'is_defined':self.is_defined}])
def is_defined(self, varname):
"""filtre permettant de ne pas lever d'exception au cas où
la variable ne serait pas définie
"""
return varname in self.context