Table des matières

, , , ,

Moteur de template Chameleon

Chameleon est un moteur de template Python. Il permet de générer des documents textes formatés par des balises(XML/HTML) à partir de modèles (les templates). Chameleon accepte en entrée des documents XML/HTML bien formés (le modèle ou template) et via un système d'attributs (les déclarations ou statements) il génère un fichier texte XML qui n'est pas nécessairement bien formé.

Le framework Pyramid peut utiliser Chameleon pour produire des pages HTML dynamiquement.

Dans le modèle (template) des attributs spécifiques intégrés dans les balises du document permettent de contrôler la génération du document de sortie. La syntaxe est la suivante:

<p namespace:command="arguments"> Contenu de ma balise </p>

Dans cet exemple, la balise paragraphe <p></p> contient un attribut namespace:command="arguments" dit déclaration (ou statement) et la balise dans son ensemble <p>…</p> est l'élément sur lequel porte la déclaration.

Les commandes sont préfixés par l'espace de nommage (ou namespace). Les différents espaces de nommage préfixant les commandes sont en général déclarés au début du template. Ces déclaration n'apparaissent pas dans le document en sortie.

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      xmlns:i18n="http://xml.zope.org/namespaces/i18n">
  ...
</html>

TAL

TAL pour Template Attribute Language est utilisé pour créer du contenu XML

Déclaration Description
tal:define Définir une variable
tal:switch Définir une condition switch
tal:condition Inclure l'élément si condition vraie
tal:repeat Répéter l'élément
tal:case Inclus l'élément si expression est égale au switch parent
tal:content Substituer le contenu de l'élément
tal: replace remplacer l'élément avec un contenu
tal:omit-tag Ignore les tag laissant seulement le contenu
tal:attributes Changer dynamiquement ou insérer des attributs
tal:on-error Modifier le contenu de l'element en cas d'erreur

Lorsque de multiples déclaration TAL existent dans un élément, elles ne sont pas executés dans leur ordre d'écriture. L'ordre d’exécution des déclarations TAL est celui donné par le tableau ci-dessus.

<html>
  <meta>
    <title tal:content="context.title" />
  </meta>
  <body>
    <div tal:condition="items">
      <p>These are your items:</p>
      <ul>
        <li tal:repeat="item items" tal:content="item" />
      </ul>
    </div>
  </body>
</html>

Dans cet exemple, la balise <li></li> contient deux déclarations. Le tableau indique que c'est d'abord tal:repeat qui sera exécutée créant une balise <li></li> par item puis tal:content qui peuplera le contenu de chaque balise. Le code suivant produirait le meme résultat:

<ul>
  <li tal:content="item" tal:repeat="item items" />
</ul>

Toute combinaison de déclarations est possible au sein d'un même élément à l’exception de tal:content et tal:replace.

Références