TurboGears - เทมเพลตที่ให้บริการ
เหตุการณ์แม้ว่าเนื้อหา HTML สามารถส่งคืนไปยังเบราว์เซอร์ได้ แต่สำหรับผลลัพธ์ขั้นสูงกว่านั้นขอแนะนำให้ใช้ template engine เสมอ ในโครงการสแต็กแบบเต็ม 'เริ่มต้นอย่างรวดเร็ว' โดยกระปุกเกียร์ Genshi ถูกเปิดใช้งานเป็นตัวแสดงเทมเพลตเริ่มต้น ในแอปพลิเคชันขั้นต่ำอย่างไรก็ตาม Genshi (หรือเครื่องมือเทมเพลตอื่น ๆ เช่น jinja) จำเป็นต้องติดตั้งและเปิดใช้งาน เครื่องมือเทมเพลต Genshi อนุญาตให้เขียนเทมเพลตใน xhtml บริสุทธิ์และตรวจสอบความถูกต้องเพื่อตรวจจับปัญหาในเวลาคอมไพล์และป้องกันการแสดงหน้าเสีย
เทมเพลตถูกอ้างถึงโดยใช้สัญกรณ์แบบจุด ในโปรเจ็กต์ Hello ของเรามีไดเร็กทอรีเทมเพลตเพื่อจัดเก็บเทมเพลตเว็บเพจ ดังนั้นsample.html จะเรียกว่า hello.templates.sample(ไม่ได้กล่าวถึงนามสกุล) TurboGears แสดงเทมเพลตนี้ผ่านมัณฑนากรเปิดเผยเพื่อเชื่อมโยงวิธีการควบคุมเข้ากับมันโดยtg.render_template() ฟังก์ชัน
ฟังก์ชันตัวควบคุมที่เปิดเผยจะส่งคืนวัตถุพจนานุกรม Python อ็อบเจ็กต์พจนานุกรมนี้ถูกส่งต่อไปยังเทมเพลตที่เชื่อมโยง ตัวยึดตำแหน่งในเทมเพลตจะเต็มไปด้วยค่าพจนานุกรม
เริ่มต้นด้วยการให้เราแสดงหน้าเว็บด้วยสคริปต์ html ธรรมดา ตัวควบคุมที่เปิดเผยจะส่งกลับไฟล์null dictionary object เนื่องจากเราไม่ได้ตั้งใจที่จะส่งข้อมูลใด ๆ เพื่อแยกวิเคราะห์ภายในสคริปต์ HTML
วิธีสร้าง HTML ตัวอย่าง
ของเรา sample.htmlได้รับด้านล่าง ตรวจสอบให้แน่ใจว่าเก็บไว้ในไดเร็กทอรี template ของโครงการ
<html>
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<h2>Hello, Welcome to TurboGears!.</h2>
</body>
</html>
เพิ่ม sample() ฟังก์ชันใน root.py และแสดง sample.html ผ่านมัน
@expose("hello.templates.sample")
def sample(self):
return {}
ผลลัพธ์ต่อไปนี้จะแสดงในเบราว์เซอร์เมื่อ URL http://localhost:8080/sample ถูกป้อนหลังจากเริ่มต้นเว็บเซิร์ฟเวอร์
ดังที่ได้กล่าวไว้ข้างต้นอ็อบเจ็กต์พจนานุกรมจะถูกส่งเป็นชุดของพารามิเตอร์ไปยังเทมเพลต Genshi เทมเพลตนี้มี 'ตัวยึดตำแหน่ง' ซึ่งเต็มไปด้วยพารามิเตอร์ที่ได้รับจากคอนโทรลเลอร์แบบไดนามิก
ให้เราเปลี่ยน sample() เพื่อส่งวัตถุพจนานุกรมไปยังเทมเพลตตัวอย่าง
@expose("hello.templates.sample")
def sample(self,name):
mydata = {'person':name}
return mydata
สร้าง sample.html ในโฟลเดอร์เทมเพลต (templates\sample.html)
<html>
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<h2>Hello, my name is ${person}!.</h2>
</body>
</html>
ในโค้ด HTML ด้านบน ${person}เป็นตัวยึด ป้อนhttp://localhost:8080/sample?name=MVLเป็น URL ในเบราว์เซอร์ URL นี้ถูกจับคู่กับsample()วิธีการในตัวควบคุมรากของเรา ส่งคืนวัตถุพจนานุกรม สิ่งนี้ถูกเลือกโดยเพจเทมเพลตที่ลิงก์ sample.html ในไดเร็กทอรีเทมเพลต จากนั้น $ {person} จะถูกแทนที่โดย MVL ในหน้าเว็บ
นอกจากนี้ยังสามารถเข้าถึงข้อมูลรูปแบบ HTML ในฟังก์ชันคอนโทรลเลอร์ได้ รูปแบบ HTML ใช้ในการส่งข้อมูลแบบฟอร์ม