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: