CherryPy - Lớp trình bày

Lớp Trình bày đảm bảo rằng giao tiếp đi qua nó nhắm mục tiêu đến những người nhận dự kiến. CherryPy duy trì hoạt động của lớp trình bày bằng các công cụ mẫu khác nhau.

Công cụ mẫu lấy đầu vào của trang với sự trợ giúp của logic nghiệp vụ và sau đó xử lý nó đến trang cuối cùng chỉ nhắm mục tiêu đến đối tượng dự kiến.

Kid - Công cụ mẫu

Kid là một công cụ mẫu đơn giản bao gồm tên của mẫu sẽ được xử lý (điều này là bắt buộc) và đầu vào của dữ liệu sẽ được chuyển khi mẫu được hiển thị.

Khi tạo mẫu lần đầu tiên, Kid tạo một mô-đun Python có thể được phục vụ như một phiên bản được lưu trong bộ nhớ cache của mẫu.

Các kid.Template hàm trả về một thể hiện của lớp mẫu có thể được sử dụng để hiển thị nội dung đầu ra.

Lớp mẫu cung cấp tập hợp các lệnh sau:

S. không Lệnh & Mô tả
1.

serialize

Nó trả về nội dung đầu ra dưới dạng một chuỗi.

2.

generate

Nó trả về nội dung đầu ra dưới dạng một trình lặp.

3.

write

Nó kết xuất nội dung đầu ra vào một đối tượng tệp.

Các tham số được sử dụng bởi các lệnh này như sau:

S. không Lệnh & Mô tả
1.

encoding

Nó thông báo cách mã hóa nội dung đầu ra

2.

fragment

Nó là một giá trị Boolean thông báo cho XML prolog hoặc Doctype

3.

output

Loại tuần tự hóa này được sử dụng để hiển thị nội dung

Thí dụ

Hãy để chúng tôi lấy một ví dụ để hiểu cách kid hoạt động -

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

Thuộc tính của trẻ em

Sau đây là các thuộc tính của Kid -

Ngôn ngữ tạo mẫu dựa trên XML

Nó là một ngôn ngữ dựa trên XML. Mẫu Kid phải là một tài liệu XML được định dạng tốt với các quy ước đặt tên phù hợp.

Kid triển khai các thuộc tính bên trong các phần tử XML để cập nhật công cụ cơ bản về hành động cần tuân theo để tiếp cận phần tử. Để tránh chồng chéo với các thuộc tính hiện có khác trong tài liệu XML, Kid đã giới thiệu không gian tên riêng của mình.

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

Thay thế biến

Kid đi kèm với một lược đồ thay thế biến và một cách tiếp cận đơn giản - $ {variable-name}.

Các biến có thể được sử dụng trong các thuộc tính của phần tử hoặc dưới dạng nội dung văn bản của phần tử. Kid sẽ đánh giá biến mỗi và mỗi khi quá trình thực hiện diễn ra.

Nếu người dùng cần đầu ra của một chuỗi ký tự là $ {something}, nó có thể được thoát bằng cách sử dụng thay thế biến bằng cách nhân đôi dấu đô la.

Tuyên bố có điều kiện

Để chuyển đổi các trường hợp khác nhau trong mẫu, cú pháp sau được sử dụng:

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

Ở đây, thẻ là tên của phần tử, ví dụ: DIV hoặc SPAN.

Biểu thức là một biểu thức Python. Nếu là một Boolean, nó đánh giá là True, phần tử sẽ được đưa vào nội dung đầu ra hoặc nếu không nó sẽ không phải là một phần của nội dung đầu ra.

Cơ chế vòng lặp

Để lặp lại một phần tử trong Kid, cú pháp sau được sử dụng:

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

Ở đây, thẻ là tên của phần tử. Biểu thức là một biểu thức Python, ví dụ cho giá trị trong [...].

Thí dụ

Đoạn mã sau đây cho thấy cách hoạt động của cơ chế lặp:

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

Các output cho đoạn mã trên với cơ chế lặp như sau: