CherryPy - Couche de présentation

La couche de présentation garantit que la communication qui la traverse cible les destinataires prévus. CherryPy maintient le fonctionnement de la couche de présentation par divers moteurs de modèles.

Un moteur de modèle prend l'entrée de la page à l'aide de la logique métier, puis la traite vers la page finale qui cible uniquement le public visé.

Kid - Le moteur de modèles

Kid est un moteur de modèle simple qui inclut le nom du modèle à traiter (ce qui est obligatoire) et l'entrée des données à transmettre lors du rendu du modèle.

Lors de la création du modèle pour la première fois, Kid crée un module Python qui peut être servi en tant que version mise en cache du modèle.

le kid.Template La fonction retourne une instance de la classe de modèle qui peut être utilisée pour rendre le contenu de sortie.

La classe de modèle fournit l'ensemble de commandes suivant -

S. Non Commande et description
1.

serialize

Il renvoie le contenu de sortie sous forme de chaîne.

2.

generate

Il renvoie le contenu de sortie sous forme d'itérateur.

3.

write

Il vide le contenu de sortie dans un objet fichier.

Les paramètres utilisés par ces commandes sont les suivants -

S. Non Commande et description
1.

encoding

Il explique comment encoder le contenu de sortie

2.

fragment

C'est une valeur booléenne qui indique au prologue XML ou au Doctype

3.

output

Ce type de sérialisation est utilisé pour rendre le contenu

Exemple

Prenons un exemple pour comprendre comment kid fonctionne -

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns:py = "http://purl.org/kid/ns#">
   <head>
      <title>${title}</title>
      <link rel = "stylesheet" href = "style.css" />
   </head>
	
   <body> 
      <p>${message}</p>
   </body>
</html>

The next step after saving the file is to process the template via the Kid engine.

import kid

params = {'title': 'Hello world!!', 'message': 'CherryPy.'}
t = kid.Template('helloworld.kid', **params)
print t.serialize(output='html')

Attributs de l'enfant

Voici les attributs de Kid -

Langage de modélisation basé sur XML

C'est un langage basé sur XML. Un modèle Kid doit être un document XML bien formé avec des conventions de dénomination appropriées.

Kid implémente des attributs dans les éléments XML pour mettre à jour le moteur sous-jacent sur l'action à suivre pour atteindre l'élément. Pour éviter le chevauchement avec d'autres attributs existants dans le document XML, Kid a introduit son propre espace de noms.

<p py:if = "...">...</p>

Substitution de variable

Kid est livré avec un schéma de substitution de variable et une approche simple - $ {variable-name}.

Les variables peuvent être utilisées dans des attributs d'éléments ou comme contenu textuel d'un élément. Kid évaluera la variable à chaque fois que l'exécution a lieu.

Si l'utilisateur a besoin de la sortie d'une chaîne littérale comme $ {quelque chose}, il peut être échappé en utilisant la substitution de variable en doublant le signe dollar.

Déclaration conditionnelle

Pour basculer entre différents cas dans le modèle, la syntaxe suivante est utilisée -

<tag py:if = "expression">...</tag>

Ici, tag est le nom de l'élément, par exemple DIV ou SPAN.

L'expression est une expression Python. Si, en tant que booléen, il est évalué à True, l'élément sera inclus dans le contenu de sortie ou bien il ne fera pas partie du contenu de sortie.

Mécanisme de boucle

Pour boucler un élément dans Kid, la syntaxe suivante est utilisée -

<tag py:for = "expression">...</tag>

Ici, tag est le nom de l'élément. L'expression est une expression Python, par exemple pour value in [...].

Exemple

Le code suivant montre comment fonctionne le mécanisme de bouclage -

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
   <head>
      <title>${title}</title>
      <link rel = "stylesheet" href = "style.css" />
   </head>
	
   <body>
      <table>
         <caption>A few songs</caption>
         <tr>
            <th>Artist</th>
            <th>Album</th>
            <th>Title</th>
         </tr>
			
         <tr py:for = "info in infos">
            <td>${info['artist']}</td>
            <td>${info['album']}</td>
            <td>${info['song']}</td>
         </tr>
      </table>
   </body>
</html>

import kid

params = discography.retrieve_songs()
t = kid.Template('songs.kid', **params)
print t.serialize(output='html')

le output pour le code ci-dessus avec le mécanisme de bouclage est le suivant -