CherryPy - Sunum Katmanı

Sunum Katmanı, içinden geçen iletişimin hedeflenen alıcıları hedeflemesini sağlar. CherryPy, sunum katmanının çeşitli şablon motorları tarafından çalışmasını sağlar.

Bir şablon motoru, iş mantığı yardımıyla sayfanın girişini alır ve daha sonra onu yalnızca hedeflenen kitleyi hedefleyen son sayfaya işler.

Çocuk - Şablon Motoru

Kid işlenecek şablonun adını (zorunlu olan) ve şablon oluşturulduğunda geçirilecek verilerin girişini içeren basit bir şablon motorudur.

Şablonun ilk kez oluşturulmasında Kid, şablonun önbelleğe alınmış bir sürümü olarak sunulabilecek bir Python modülü oluşturur.

kid.Template işlev, çıktı içeriğini oluşturmak için kullanılabilen şablon sınıfının bir örneğini döndürür.

Şablon sınıfı aşağıdaki komut kümesini sağlar -

S.No Komut ve Açıklama
1.

serialize

Çıktı içeriğini bir dizge olarak döndürür.

2.

generate

Çıktı içeriğini bir yineleyici olarak döndürür.

3.

write

Çıktı içeriğini bir dosya nesnesine döker.

Bu komutlar tarafından kullanılan parametreler aşağıdaki gibidir -

S.No Komut ve Açıklama
1.

encoding

Çıktı içeriğinin nasıl kodlanacağını bildirir

2.

fragment

XML prolog veya Doctype'a söyleyen bir Boolean değeridir

3.

output

Bu tür serileştirme, içeriği oluşturmak için kullanılır

Misal

Nasıl olduğunu anlamak için bir örnek alalım kid işler -

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

Çocuğun Nitelikleri

Aşağıdakiler Kid'in nitelikleridir -

XML Tabanlı Şablonlama Dili

XML tabanlı bir dildir. Bir Kid şablonu, uygun adlandırma kurallarına sahip, iyi biçimlendirilmiş bir XML belgesi olmalıdır.

Kid, öğeye ulaşmak için izlenecek eylemin temelini oluşturan motoru güncellemek için XML öğeleri içindeki öznitelikleri uygular. XML belgesindeki diğer mevcut özniteliklerle örtüşmekten kaçınmak için Kid kendi ad alanını tanıttı.

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

Değişken Değiştirme

Çocuk, değişken bir ikame şeması ve basit bir yaklaşımla gelir - $ {değişken-adı}.

Değişkenler, elemanların özniteliklerinde veya bir elemanın metin içeriği olarak kullanılabilir. Çocuk, her yürütme gerçekleştiğinde değişkeni değerlendirecektir.

Kullanıcı $ {bir şey} olarak bir değişmez dizenin çıktısına ihtiyaç duyuyorsa, dolar işaretini ikiye katlayarak değişken ikamesi kullanılarak önlenebilir.

Koşullu İfade

Şablonda farklı durumları değiştirmek için aşağıdaki sözdizimi kullanılır -

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

Burada etiket, öğenin adıdır, örneğin DIV veya SPAN.

İfade bir Python ifadesidir. Bir Boolean olarak True olarak değerlendirilirse, öğe çıktı içeriğine dahil edilecek veya çıktı içeriğinin bir parçası olmayacaktır.

Döngü Mekanizması

Kid'de bir öğeyi döngüye almak için aşağıdaki sözdizimi kullanılır -

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

Burada etiket, öğenin adıdır. İfade bir Python ifadesidir, örneğin [...] içindeki değer için.

Misal

Aşağıdaki kod, döngü mekanizmasının nasıl çalıştığını gösterir -

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

output döngü mekanizmalı yukarıdaki kod için aşağıdaki gibidir -