CherryPy - เลเยอร์การนำเสนอ

เลเยอร์การนำเสนอช่วยให้มั่นใจได้ว่าการสื่อสารที่ส่งผ่านเป้าหมายไปยังผู้รับ CherryPy รักษาการทำงานของเลเยอร์การนำเสนอโดยเอ็นจิ้นเทมเพลตต่างๆ

เอ็นจินเทมเพลตรับอินพุตของเพจด้วยความช่วยเหลือของตรรกะทางธุรกิจจากนั้นประมวลผลไปยังเพจสุดท้ายซึ่งกำหนดเป้าหมายเฉพาะผู้ชมที่ต้องการเท่านั้น

Kid - เครื่องมือแม่แบบ

Kid เป็นเครื่องมือเทมเพลตแบบง่ายซึ่งมีชื่อของเทมเพลตที่ต้องดำเนินการ (ซึ่งจำเป็น) และอินพุตของข้อมูลที่จะส่งผ่านเมื่อแสดงเทมเพลต

ในการสร้างเทมเพลตครั้งแรก Kid จะสร้างโมดูล Python ซึ่งสามารถใช้เป็นเทมเพลตเวอร์ชันแคชได้

kid.Template ฟังก์ชันส่งคืนอินสแตนซ์ของคลาสเทมเพลตซึ่งสามารถใช้เพื่อแสดงเนื้อหาเอาต์พุต

คลาสเทมเพลตมีชุดคำสั่งต่อไปนี้ -

ส. เลขที่ คำสั่งและคำอธิบาย
1.

serialize

ส่งคืนเนื้อหาเอาต์พุตเป็นสตริง

2.

generate

ส่งคืนเนื้อหาเอาต์พุตเป็นตัววนซ้ำ

3.

write

มันทิ้งเนื้อหาที่ส่งออกไปยังวัตถุไฟล์

พารามิเตอร์ที่ใช้โดยคำสั่งเหล่านี้มีดังนี้ -

ส. เลขที่ คำสั่งและคำอธิบาย
1.

encoding

แจ้งวิธีการเข้ารหัสเนื้อหาเอาต์พุต

2.

fragment

เป็นค่าบูลีนที่บอกกับ XML prolog หรือ Doctype

3.

output

การทำให้เป็นอนุกรมประเภทนี้ใช้เพื่อแสดงเนื้อหา

ตัวอย่าง

ให้เราใช้ตัวอย่างเพื่อทำความเข้าใจวิธีการ kid ผลงาน -

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

คุณสมบัติของเด็ก

ต่อไปนี้เป็นคุณลักษณะของ Kid -

ภาษาเทมเพลตที่ใช้ XML

เป็นภาษาที่ใช้ XML เทมเพลต Kid ต้องเป็นเอกสาร XML ที่มีรูปแบบดีและมีรูปแบบการตั้งชื่อที่เหมาะสม

Kid ใช้แอ็ตทริบิวต์ภายในองค์ประกอบ XML เพื่ออัปเดตเอ็นจิ้นพื้นฐานในการดำเนินการที่จะติดตามเพื่อเข้าถึงองค์ประกอบ เพื่อหลีกเลี่ยงการทับซ้อนกับแอตทริบิวต์อื่น ๆ ที่มีอยู่ภายในเอกสาร XML Kid ได้แนะนำเนมสเปซของตนเอง

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

การทดแทนตัวแปร

Kid มาพร้อมกับรูปแบบการทดแทนตัวแปรและแนวทางง่ายๆ - $ {variable-name}

ตัวแปรสามารถใช้ในแอตทริบิวต์ขององค์ประกอบหรือเป็นเนื้อหาข้อความขององค์ประกอบ Kid จะประเมินตัวแปรทุกครั้งที่มีการดำเนินการ

หากผู้ใช้ต้องการเอาต์พุตของสตริงลิเทอรัลเป็น $ {something} สามารถหลีกเลี่ยงได้โดยใช้การแทนที่ตัวแปรโดยการเพิ่มเครื่องหมายดอลลาร์เป็นสองเท่า

คำชี้แจงเงื่อนไข

สำหรับการสลับกรณีต่างๆในเทมเพลตจะใช้ไวยากรณ์ต่อไปนี้ -

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

ในที่นี้แท็กคือชื่อขององค์ประกอบเช่น DIV หรือ SPAN

นิพจน์เป็นนิพจน์ Python หากเป็นบูลีนที่ประเมินเป็น True องค์ประกอบจะรวมอยู่ในเนื้อหาเอาต์พุตมิฉะนั้นจะไม่เป็นส่วนหนึ่งของเนื้อหาเอาต์พุต

กลไกการวนซ้ำ

สำหรับการวนองค์ประกอบใน Kid จะใช้ไวยากรณ์ต่อไปนี้ -

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

ในที่นี้แท็กคือชื่อขององค์ประกอบ นิพจน์คือนิพจน์ Python ตัวอย่างเช่นสำหรับค่าใน [... ]

ตัวอย่าง

รหัสต่อไปนี้แสดงวิธีการทำงานของกลไกการวนซ้ำ -

<!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 สำหรับรหัสด้านบนที่มีกลไกการวนซ้ำมีดังนี้ -