CherryPy - Capa de presentación
La capa de presentación asegura que la comunicación que pasa a través de ella se dirige a los destinatarios previstos. CherryPy mantiene el funcionamiento de la capa de presentación mediante varios motores de plantilla.
Un motor de plantillas toma la entrada de la página con la ayuda de la lógica empresarial y luego la procesa a la página final que se dirige solo al público objetivo.
Kid - El motor de plantillas
Kid es un motor de plantilla simple que incluye el nombre de la plantilla a procesar (que es obligatorio) y la entrada de los datos que se pasarán cuando se procese la plantilla.
Al crear la plantilla por primera vez, Kid crea un módulo Python que puede servir como una versión en caché de la plantilla.
los kid.Template La función devuelve una instancia de la clase de plantilla que se puede utilizar para representar el contenido de salida.
La clase de plantilla proporciona el siguiente conjunto de comandos:
S. No | Comando y descripción |
---|---|
1. | serialize Devuelve el contenido de salida como una cadena. |
2. | generate Devuelve el contenido de salida como un iterador. |
3. | write Vuelca el contenido de salida en un objeto de archivo. |
Los parámetros utilizados por estos comandos son los siguientes:
S. No | Comando y descripción |
---|---|
1. | encoding Informa cómo codificar el contenido de salida. |
2. | fragment Es un valor booleano que le dice a XML prolog o Doctype |
3. | output Este tipo de serialización se utiliza para representar el contenido. |
Ejemplo
Tomemos un ejemplo para entender cómo kid trabaja -
<!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')
Atributos del niño
Los siguientes son los atributos de Kid:
Lenguaje de plantillas basado en XML
Es un lenguaje basado en XML. Una plantilla Kid debe ser un documento XML bien formado con convenciones de nomenclatura adecuadas.
Kid implementa atributos dentro de los elementos XML para actualizar el motor subyacente sobre la acción a seguir para llegar al elemento. Para evitar la superposición con otros atributos existentes dentro del documento XML, Kid ha introducido su propio espacio de nombres.
<p py:if = "...">...</p>
Sustitución de variables
Kid viene con un esquema de sustitución de variables y un enfoque simple: $ {nombre-variable}.
Las variables se pueden utilizar en atributos de elementos o como contenido de texto de un elemento. Kid evaluará la variable cada vez que se lleve a cabo la ejecución.
Si el usuario necesita la salida de una cadena literal como $ {algo}, se puede escapar usando la sustitución de variables duplicando el signo de dólar.
Sentencia condicional
Para alternar diferentes casos en la plantilla, se utiliza la siguiente sintaxis:
<tag py:if = "expression">...</tag>
Aquí, etiqueta es el nombre del elemento, por ejemplo, DIV o SPAN.
La expresión es una expresión de Python. Si como booleano se evalúa como Verdadero, el elemento se incluirá en el contenido de salida o no será parte del contenido de salida.
Mecanismo de bucle
Para hacer un bucle de un elemento en Kid, se utiliza la siguiente sintaxis:
<tag py:for = "expression">...</tag>
Aquí, etiqueta es el nombre del elemento. La expresión es una expresión de Python, por ejemplo, para el valor en [...].
Ejemplo
El siguiente código muestra cómo funciona el mecanismo de bucle:
<!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')
los output para el código anterior con el mecanismo de bucle es el siguiente: