TurboGears - Phân trang
TurboGears cung cấp một trình trang trí tiện lợi được gọi là paginate () để phân chia đầu ra trong các trang. Decorator này được kết hợp với decorator (). Trình trang trí @Paginate () lấy đối tượng từ điển của kết quả truy vấn làm đối số. Ngoài ra, số lượng bản ghi trên mỗi trang được quyết định bởi giá trị của thuộc tính items_per_page. Đảm bảo rằng bạn nhập hàm phân trang từ tg.decorators vào mã của mình.
Viết lại hàm listrec () trong root.py như sau:
from tg.decorators import paginate
class RootController(BaseController):
@expose ("hello.templates.studentlist")
@paginate("entries", items_per_page = 3)
def listrec(self):
entries = DBSession.query(student).all()
return dict(entries = entries)
Các mục trên mỗi trang được đặt thành ba.
Trong mẫu studentlist.html, điều hướng trang được bật bằng cách thêm tmpl_context.paginators.entries.pager () bên dưới chỉ thị py: for. Mã cho mẫu này phải như sau:
<html xmlns = "http://www.w3.org/1999/xhtml"
xmlns:py = "http://genshi.edgewall.org/">
<head>
<link rel = "stylesheet" type = "text/css" media = "screen"
href = "${tg.url('/css/style.css')}" />
<title>Welcome to TurboGears</title>
</head>
<body>
<h1>Welcome to TurboGears</h1>
<py:with vars = "flash = tg.flash_obj.render('flash', use_js = False)">
<div py:if = "flash" py:replace = "Markup(flash)" />
</py:with>
<h2>Current Entries</h2>
<table border = '1'>
<thead>
<tr>
<th>Name</th>
<th>City</th>
<th>Address</th>
<th>Pincode</th>
</tr>
</thead>
<tbody>
<py:for each = "entry in entries">
<tr>
<td>${entry.name}</td>
<td>${entry.city}</td>
<td>${entry.address}</td>
<td>${entry.pincode}</td>
</tr>
</py:for>
<div>${tmpl_context.paginators.entries.pager()}</div>
</tbody>
</table>
</body>
</html>
Đi vào http://localhost:8080/listrectrong trình duyệt. Trang đầu tiên của các bản ghi trong bảng được hiển thị. Trên đầu bảng này, các liên kết đến số trang cũng được nhìn thấy.
Cách thêm hỗ trợ phân trang vào Datagrid
Cũng có thể thêm hỗ trợ phân trang vào datagrid. Trong ví dụ sau, datagrid được phân trang được thiết kế để hiển thị nút hành động. Để kích hoạt nút hành động, đối tượng datagrid được xây dựng với mã sau:
student_grid = DataGrid(fields = [('Name', 'name'),('City', 'city'),
('Address','address'), ('PINCODE', 'pincode'),
('Action', lambda obj:genshi.Markup('<a
href = "%s">Edit</a>' % url('/edit',
params = dict(name = obj.name)))) ])
Ở đây nút hành động được liên kết với tham số tên của mỗi hàng trong lưới dữ liệu.
Viết lại showgrid() chức năng như sau -
@expose('hello.templates.grid')
@paginate("data", items_per_page = 3)
def showgrid(self):
data = DBSession.query(student).all()
return dict(page = 'grid', grid = student_grid, data = data)
Trình duyệt hiển thị datagrid được phân trang như sau:
Bằng cách nhấp vào nút Chỉnh sửa ở hàng thứ ba, nó sẽ chuyển hướng đến URL sau http://localhost:8080/edit?name=Rajesh+Patil