TurboGears - ลำดับชั้นของ URL

บางครั้งเว็บแอปพลิเคชันอาจต้องการโครงสร้าง URL ที่มีมากกว่าหนึ่งระดับ TurboGears สามารถสำรวจลำดับชั้นของวัตถุเพื่อค้นหาวิธีการที่เหมาะสมที่สามารถจัดการคำขอของคุณได้

โปรเจ็กต์ 'เริ่มต้นอย่างรวดเร็ว' พร้อมกระปุกเกียร์มีคลาส BaseController ในโฟลเดอร์ lib ของโปรเจ็กต์ มีให้ในชื่อ 'Hello / hello / lib / base.py' ทำหน้าที่เป็นคลาสพื้นฐานสำหรับคอนโทรลเลอร์ย่อยทั้งหมด ในการเพิ่มระดับย่อยของ URL ในแอปพลิเคชันให้ออกแบบคลาสย่อยที่เรียกว่า BlogController ที่มาจาก BaseController

BlogController นี้มีฟังก์ชั่นคอนโทรลเลอร์สองตัวคือ index () และ post () ทั้งสองแบบได้รับการออกแบบมาเพื่อแสดงเทมเพลตแต่ละแบบคือ blog.html และ post.html

Note - เทมเพลตเหล่านี้ใส่ไว้ในโฟลเดอร์ย่อย - เทมเพลต / บล็อก

class BlogController(BaseController):

   @expose('hello.templates.blog.blog')
   def index(self):
      return {}
		
   @expose('hello.templates.blog.post')
   def post(self):
      from datetime import date
      now = date.today().strftime("%d-%m-%y")
      return {'date':now}

ตอนนี้ประกาศออบเจ็กต์ของคลาสนี้ในคลาส RootController (ใน root.py) ดังนี้ -

class RootController(BaseController):
   blog = BlogController()

ฟังก์ชันคอนโทรลเลอร์อื่น ๆ สำหรับ URL ระดับบนสุดจะอยู่ในคลาสนี้เหมือนก่อนหน้านี้

เมื่อ URL http://localhost:8080/blog/จะถูกจับคู่กับฟังก์ชันตัวควบคุม index () ภายในคลาส BlogController ในทำนองเดียวกันhttp://localhost:8080/blog/post จะเรียกใช้ฟังก์ชัน post ()

โค้ดสำหรับ blog.html และ post.html มีดังต่อไปนี้ -

Blog.html

<html>
   <body>
      <h2>My Blog</h2>
   </body>
</html>

post.html

<html>
   <body>
      <h2>My new post dated $date</h2>
   </body>
</html>

เมื่อ URL http://localhost:8080/blog/ ป้อนมันจะสร้างผลลัพธ์ต่อไปนี้ -

เมื่อ URL http://localhost:8080/blog/post ป้อนมันจะสร้างผลลัพธ์ต่อไปนี้ -