CherryPy - Präsentationsschicht

Die Präsentationsschicht stellt sicher, dass die Kommunikation, die sie durchläuft, auf die beabsichtigten Empfänger abzielt. CherryPy verwaltet die Arbeit der Präsentationsschicht durch verschiedene Template-Engines.

Eine Vorlagen-Engine nimmt die Eingabe der Seite mithilfe der Geschäftslogik auf und verarbeitet sie dann zur letzten Seite, die nur die beabsichtigte Zielgruppe anspricht.

Kid - Die Template Engine

Kid ist eine einfache Vorlagen-Engine, die den Namen der zu verarbeitenden Vorlage (die obligatorisch ist) und die Eingabe der Daten enthält, die beim Rendern der Vorlage übergeben werden sollen.

Beim erstmaligen Erstellen der Vorlage erstellt Kid ein Python-Modul, das als zwischengespeicherte Version der Vorlage bereitgestellt werden kann.

Das kid.Template Die Funktion gibt eine Instanz der Vorlagenklasse zurück, mit der der Ausgabeinhalt gerendert werden kann.

Die Vorlagenklasse bietet die folgenden Befehle:

S.No. Befehl & Beschreibung
1.

serialize

Es gibt den Ausgabeinhalt als Zeichenfolge zurück.

2.

generate

Es gibt den Ausgabeinhalt als Iterator zurück.

3.

write

Der Ausgabeinhalt wird in ein Dateiobjekt ausgegeben.

Die von diesen Befehlen verwendeten Parameter lauten wie folgt:

S.No. Befehl & Beschreibung
1.

encoding

Es informiert darüber, wie der Ausgabeinhalt codiert wird

2.

fragment

Es ist ein boolescher Wert, der XML-Prolog oder Doctype mitteilt

3.

output

Diese Art der Serialisierung wird zum Rendern des Inhalts verwendet

Beispiel

Nehmen wir ein Beispiel, um zu verstehen, wie kid funktioniert -

<!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')

Kinderattribute

Das Folgende sind die Attribute von Kid -

XML-basierte Template-Sprache

Es ist eine XML-basierte Sprache. Eine Kid-Vorlage muss ein wohlgeformtes XML-Dokument mit den richtigen Namenskonventionen sein.

Kid implementiert Attribute in den XML-Elementen, um die zugrunde liegende Engine für die Aktion zu aktualisieren, die zum Erreichen des Elements ausgeführt werden soll. Um Überschneidungen mit anderen vorhandenen Attributen im XML-Dokument zu vermeiden, hat Kid einen eigenen Namespace eingeführt.

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

Variable Substitution

Kid wird mit einem Variablensubstitutionsschema und einem einfachen Ansatz geliefert - $ {Variablenname}.

Die Variablen können entweder in Attributen von Elementen oder als Textinhalt eines Elements verwendet werden. Kid bewertet die Variable jedes Mal, wenn die Ausführung stattfindet.

Wenn der Benutzer die Ausgabe einer Literalzeichenfolge als $ {Something} benötigt, kann sie mithilfe der Variablensubstitution durch Verdoppeln des Dollarzeichens maskiert werden.

Bedingte Erklärung

Zum Umschalten verschiedener Fälle in der Vorlage wird die folgende Syntax verwendet:

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

Tag ist hier der Name des Elements, zum Beispiel DIV oder SPAN.

Der Ausdruck ist ein Python-Ausdruck. Wenn es als Boolescher Wert True ergibt, wird das Element in den Ausgabeinhalt aufgenommen, oder es ist nicht Teil des Ausgabeinhalts.

Schleifenmechanismus

Zum Schleifen eines Elements in Kid wird die folgende Syntax verwendet:

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

Hier ist Tag der Name des Elements. Der Ausdruck ist ein Python-Ausdruck, beispielsweise für den Wert in [...].

Beispiel

Der folgende Code zeigt, wie der Schleifenmechanismus funktioniert -

<!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')

Das output für den obigen Code mit dem Schleifenmechanismus ist wie folgt -