Le templating dans l'Ead2
=========================

L':term:`agrégateur` compile les données venant du :term:`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']

Les modules complémentaires
----------------------------

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.

Le 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 :term:`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.

Le lancement du templating
---------------------------

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
