TurboGears - Penomoran halaman
TurboGears menyediakan dekorator praktis yang disebut paginate () untuk membagi keluaran di halaman. Dekorator ini dikombinasikan dengan dekorator expose (). Dekorator @Paginate () mengambil objek kamus dari hasil kueri sebagai argumen. Selain itu, jumlah record per halaman ditentukan oleh nilai atribut items_per_page. Pastikan Anda mengimpor fungsi paginate dari tg.decorators ke dalam kode Anda.
Tulis ulang fungsi listrec () di root.py sebagai berikut -
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)
Item per halaman disetel menjadi tiga.
Dalam template studentlist.html, navigasi halaman diaktifkan dengan menambahkan tmpl_context.paginators.entries.pager () di bawah py: for directive. Kode untuk template ini harus seperti di bawah ini -
<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>
Memasukkan http://localhost:8080/listrecdi browser. Halaman pertama rekaman dalam tabel akan ditampilkan. Di atas tabel ini, tautan ke nomor halaman juga terlihat.
Cara Menambahkan Dukungan Penomoran Halaman ke Datagrid
Anda juga dapat menambahkan dukungan pagination ke datagrid. Dalam contoh berikut, datagrid berpaginasi dirancang untuk menampilkan tombol tindakan. Untuk mengaktifkan objek datagrid tombol aksi dibangun dengan kode berikut -
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)))) ])
Di sini tombol tindakan ditautkan ke parameter nama setiap baris di kisi data.
Tulis ulang showgrid() berfungsi sebagai berikut -
@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)
Browser menunjukkan datagrid paginasi sebagai berikut -
Dengan mengklik tombol Edit di baris ketiga, itu akan dialihkan ke URL berikut http://localhost:8080/edit?name=Rajesh+Patil