CherryPy - Lapisan Presentasi
Lapisan Presentasi memastikan bahwa komunikasi yang melewatinya menargetkan penerima yang dituju. CherryPy mempertahankan kerja lapisan presentasi dengan berbagai mesin templat.
Mesin templat mengambil input halaman dengan bantuan logika bisnis dan kemudian memprosesnya ke halaman terakhir yang hanya menargetkan audiens yang dituju.
Kid - Mesin Template
Kid adalah mesin templat sederhana yang menyertakan nama templat yang akan diproses (yang wajib) dan input data yang akan diteruskan saat templat dibuat.
Saat pembuatan template untuk pertama kalinya, Kid membuat modul Python yang dapat disajikan sebagai versi cache dari template.
Itu kid.Template function mengembalikan sebuah instance dari kelas template yang dapat digunakan untuk membuat konten output.
Kelas template menyediakan set perintah berikut -
S.No | Perintah & Deskripsi |
---|---|
1. | serialize Ini mengembalikan konten keluaran sebagai string. |
2. | generate Ini mengembalikan konten keluaran sebagai iterator. |
3. | write Ini membuang konten output ke dalam objek file. |
Parameter yang digunakan oleh perintah ini adalah sebagai berikut -
S.No | Perintah & Deskripsi |
---|---|
1. | encoding Ini menginformasikan cara menyandikan konten keluaran |
2. | fragment Ini adalah nilai Boolean yang memberitahu XML prolog atau Doctype |
3. | output Jenis serialisasi ini digunakan untuk merender konten |
Contoh
Mari kita ambil contoh untuk memahami caranya kid bekerja -
<!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')
Atribut Anak
Berikut ini adalah atribut Kid -
Bahasa Templating Berbasis XML
Ini adalah bahasa berbasis XML. Template Anak harus berupa dokumen XML yang dibentuk dengan baik dengan konvensi penamaan yang tepat.
Kid mengimplementasikan atribut dalam elemen XML untuk memperbarui mesin yang mendasari tindakan yang harus diikuti untuk mencapai elemen tersebut. Untuk menghindari tumpang tindih dengan atribut lain yang ada dalam dokumen XML, Kid telah memperkenalkan namespace-nya sendiri.
<p py:if = "...">...</p>
Substitusi Variabel
Kid hadir dengan skema substitusi variabel dan pendekatan sederhana - $ {variable-name}.
Variabel dapat digunakan dalam atribut elemen atau sebagai konten teks elemen. Kid akan mengevaluasi variabel setiap kali eksekusi berlangsung.
Jika pengguna membutuhkan keluaran dari string literal sebagai $ {sesuatu}, itu bisa di-escape menggunakan substitusi variabel dengan menggandakan tanda dolar.
Pernyataan Bersyarat
Untuk mengganti kasus yang berbeda dalam template, sintaks berikut digunakan -
<tag py:if = "expression">...</tag>
Di sini, tag adalah nama elemen, misalnya DIV atau SPAN.
Ekspresi tersebut adalah ekspresi Python. Jika sebagai Boolean terevaluasi ke True, elemen tersebut akan disertakan dalam konten output atau tidak akan menjadi bagian dari konten output.
Mekanisme Pendauran
Untuk mengulang elemen di Kid, sintaks berikut digunakan -
<tag py:for = "expression">...</tag>
Di sini, tag adalah nama elemen. Ekspresi tersebut adalah ekspresi Python, misalnya untuk nilai dalam [...].
Contoh
Kode berikut menunjukkan bagaimana mekanisme perulangan bekerja -
<!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')
Itu output untuk kode diatas dengan mekanisme perulangan adalah sebagai berikut -