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 -