CherryPy - warstwa prezentacji

Warstwa prezentacji zapewnia, że ​​przechodząca przez nią komunikacja jest skierowana do zamierzonych odbiorców. CherryPy utrzymuje działanie warstwy prezentacji przez różne silniki szablonów.

Silnik szablonów przyjmuje dane wejściowe strony za pomocą logiki biznesowej, a następnie przetwarza je na ostateczną stronę, która jest skierowana tylko do zamierzonych odbiorców.

Kid - silnik szablonów

Kid to prosty silnik szablonów, który zawiera nazwę szablonu do przetworzenia (co jest obowiązkowe) oraz wprowadzenie danych, które mają być przekazane podczas renderowania szablonu.

Podczas tworzenia szablonu po raz pierwszy Kid tworzy moduł Pythona, który może służyć jako buforowana wersja szablonu.

Plik kid.Template funkcja zwraca instancję klasy szablonu, której można użyć do renderowania treści wyjściowej.

Klasa szablonu zawiera następujący zestaw poleceń -

S.Nr Polecenie i opis
1.

serialize

Zwraca zawartość wyjściową jako ciąg.

2.

generate

Zwraca zawartość wyjściową jako iterator.

3.

write

Zrzuca zawartość wyjściową do obiektu pliku.

Parametry używane przez te polecenia są następujące -

S.Nr Polecenie i opis
1.

encoding

Informuje, jak zakodować zawartość wyjściową

2.

fragment

Jest to wartość logiczna, która mówi prologowi XML lub Doctype

3.

output

Ten typ serializacji jest używany do renderowania zawartości

Przykład

Weźmy przykład, aby zrozumieć, jak to zrobić kid działa -

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

Atrybuty dzieci

Oto atrybuty Kid -

Język szablonów oparty na języku XML

Jest to język oparty na XML. Szablon Kid musi być dobrze sformułowanym dokumentem XML z odpowiednimi konwencjami nazewnictwa.

Kid implementuje atrybuty w elementach XML, aby zaktualizować bazowy silnik w akcji, którą należy wykonać, aby dotrzeć do elementu. Aby uniknąć nakładania się z innymi istniejącymi atrybutami w dokumencie XML, Kid wprowadził własną przestrzeń nazw.

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

Zastępowanie zmiennych

Kid ma schemat podstawiania zmiennych i proste podejście - $ {nazwa-zmiennej}.

Zmienne mogą być używane w atrybutach elementów lub jako treść tekstowa elementu. Dziecko będzie oceniać zmienną za każdym razem, gdy ma miejsce wykonanie.

Jeśli użytkownik potrzebuje wyjścia ciągu literału jako $ {coś}, można go zmienić za pomocą podstawienia zmiennej przez podwojenie znaku dolara.

Instrukcja warunkowa

Do przełączania różnych przypadków w szablonie używana jest następująca składnia -

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

Tutaj tag to nazwa elementu, na przykład DIV lub SPAN.

Wyrażenie jest wyrażeniem Pythona. Jeśli jako wartość logiczna przyjmuje wartość True, element zostanie uwzględniony w zawartości wyjściowej lub nie będzie częścią zawartości wyjściowej.

Mechanizm pętli

Do zapętlenia elementu w Kid, używana jest następująca składnia -

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

Tutaj tag to nazwa elementu. Wyrażenie jest wyrażeniem Pythona, na przykład dla wartości w [...].

Przykład

Poniższy kod pokazuje, jak działa mechanizm pętli -

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

Plik output dla powyższego kodu z mechanizmem zapętlenia wygląda następująco -