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 -