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 ใช้ในการส่งข้อมูลแบบฟอร์ม