CherryPy - Camada de apresentação

A camada de apresentação garante que a comunicação que passa por ela seja direcionada aos destinatários pretendidos. CherryPy mantém o funcionamento da camada de apresentação por vários mecanismos de template.

Um mecanismo de modelo pega a entrada da página com a ajuda da lógica de negócios e a processa para a página final, que visa apenas o público-alvo.

Kid - o mecanismo de modelo

Kid é um mecanismo de modelo simples que inclui o nome do modelo a ser processado (o que é obrigatório) e a entrada dos dados a serem passados ​​quando o modelo é renderizado.

Na criação do modelo pela primeira vez, Kid cria um módulo Python que pode ser servido como uma versão em cache do modelo.

o kid.Template A função retorna uma instância da classe de modelo que pode ser usada para renderizar o conteúdo de saída.

A classe de modelo fornece o seguinte conjunto de comandos -

S.Não Comando e Descrição
1

serialize

Ele retorna o conteúdo de saída como uma string.

2

generate

Ele retorna o conteúdo de saída como um iterador.

3 -

write

Ele despeja o conteúdo de saída em um objeto de arquivo.

Os parâmetros usados ​​por esses comandos são os seguintes -

S.Não Comando e Descrição
1

encoding

Informa como codificar o conteúdo de saída

2

fragment

É um valor booleano que informa ao prólogo XML ou Doctype

3 -

output

Este tipo de serialização é usado para renderizar o conteúdo

Exemplo

Vamos dar um exemplo para entender como kid funciona -

<!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 infantis

A seguir estão os atributos de Kid -

Linguagem de modelagem baseada em XML

É uma linguagem baseada em XML. Um modelo Kid deve ser um documento XML bem formado com convenções de nomenclatura adequadas.

Kid implementa atributos dentro dos elementos XML para atualizar o mecanismo subjacente sobre a ação a ser seguida para alcançar o elemento. Para evitar a sobreposição com outros atributos existentes no documento XML, Kid introduziu seu próprio namespace.

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

Substituição de Variável

Kid vem com um esquema de substituição de variáveis ​​e uma abordagem simples - $ {nome-da-variável}.

As variáveis ​​podem ser usadas em atributos de elementos ou como conteúdo de texto de um elemento. Kid avaliará a variável toda vez que a execução ocorrer.

Se o usuário precisa da saída de uma string literal como $ {something}, pode-se escapar dela usando a substituição de variável dobrando o cifrão.

Afirmação condicional

Para alternar entre diferentes casos no modelo, a seguinte sintaxe é usada -

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

Aqui, tag é o nome do elemento, por exemplo DIV ou SPAN.

A expressão é uma expressão Python. Se como um Booleano for avaliado como True, o elemento será incluído no conteúdo de saída ou então não fará parte do conteúdo de saída.

Mecanismo de Looping

Para repetir um elemento em Kid, a seguinte sintaxe é usada -

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

Aqui, tag é o nome do elemento. A expressão é uma expressão Python, por exemplo, para valor em [...].

Exemplo

O código a seguir mostra como funciona o mecanismo de loop -

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

o output para o código acima com o mecanismo de loop é o seguinte -