TurboGears - Mẫu phục vụ

Một Sự kiện mặc dù nội dung HTML có thể được trả lại cho trình duyệt, để có đầu ra nâng cao hơn, việc sử dụng công cụ mẫu luôn được ưu tiên. Trong một dự án ngăn xếp đầy đủ được 'khởi động nhanh' bằng hộp số, Genshi được bật làm trình kết xuất mẫu mặc định. Tuy nhiên, trong một ứng dụng tối thiểu, Genshi (hoặc bất kỳ công cụ mẫu nào khác, chẳng hạn như jinja) cần được cài đặt và kích hoạt. Genshi template engine cho phép viết các mẫu trong xhtml thuần túy và xác thực chúng để phát hiện các vấn đề tại thời điểm biên dịch và ngăn chặn việc cung cấp các trang bị hỏng.

Các mẫu được tham chiếu bằng cách sử dụng ký hiệu có dấu chấm. Trong dự án Hello của chúng tôi, một thư mục mẫu được cung cấp để lưu trữ các trang web mẫu. Vì thếsample.html sẽ được gọi là hello.templates.sample(phần mở rộng không được đề cập). TurboGears kết xuất mẫu này thông qua trình trang trí hiển thị để liên kết phương pháp bộ điều khiển với nó bằng cáchtg.render_template() chức năng.

Hàm bộ điều khiển được tiếp xúc trả về một đối tượng từ điển Python. Đối tượng từ điển này đến lượt nó được chuyển cho mẫu được liên kết. Phần giữ chỗ trong mẫu chứa đầy các giá trị từ điển.

Để bắt đầu, hãy để chúng tôi hiển thị một trang web với tập lệnh html thuần túy. Bộ điều khiển tiếp xúc trả về mộtnull dictionary object vì chúng tôi không có ý định gửi bất kỳ dữ liệu nào được phân tích cú pháp bên trong tập lệnh HTML.

Cách tạo HTML mẫu

Của chúng tôi sample.htmlđược đưa ra dưới đây. Đảm bảo rằng nó được lưu trữ trong thư mục mẫu của dự án.

<html>
   <head>
      <title>TurboGears Templating Example</title>
   </head>
	
   <body>
      <h2>Hello, Welcome to TurboGears!.</h2>
   </body>
</html>

Thêm vào sample() chức năng trong root.py và hiển thị sample.html thông qua nó.

@expose("hello.templates.sample")
   def sample(self):
      return {}

Kết quả sau sẽ được hiển thị trong trình duyệt khi một URL http://localhost:8080/sample được nhập sau khi khởi động máy chủ web.

Như đã đề cập ở trên, một đối tượng từ điển được gửi dưới dạng tập hợp các tham số đến một khuôn mẫu Genshi. Mẫu này chứa 'các trình giữ chỗ', được điền động với các thông số nhận được từ bộ điều khiển.

Hãy để chúng tôi thay đổi sample() chức năng gửi một đối tượng từ điển đến mẫu mẫu.

@expose("hello.templates.sample")
   def sample(self,name):
      mydata = {'person':name}
      return mydata

Tạo nên sample.html trong thư mục mẫu (templates\sample.html)

<html>
   <head>
      <title>TurboGears Templating Example</title>
   </head>
	
   <body>
      <h2>Hello, my name is ${person}!.</h2>
   </body>
</html>

Trong mã HTML ở trên, ${person}là trình giữ chỗ. Đi vàohttp://localhost:8080/sample?name=MVLdưới dạng URL trong trình duyệt. URL này được ánh xạ tớisample()trong bộ điều khiển gốc của chúng tôi. Nó trả về một đối tượng từ điển. Điều này được chọn bởi trang mẫu liên kết sample.html trong thư mục mẫu. $ {Person} sau đó được thay thế bằng MVL trong trang web.

Cũng có thể truy cập dữ liệu biểu mẫu HTML trong một hàm bộ điều khiển. Biểu mẫu HTML sử dụng để gửi dữ liệu biểu mẫu.