TurboGears - Paginierung

TurboGears bietet einen praktischen Dekorator namens paginate (), um die Ausgabe auf den Seiten zu teilen. Dieser Dekorator wird mit dem Dekorator expose () kombiniert. Der Dekorator @Paginate () verwendet das Wörterbuchobjekt des Abfrageergebnisses als Argument. Darüber hinaus wird die Anzahl der Datensätze pro Seite durch den Wert des Attributs items_per_page bestimmt. Stellen Sie sicher, dass Sie die Paginate-Funktion von tg.decorators in Ihren Code importieren.

Schreiben Sie die Funktion listrec () in root.py wie folgt um:

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)

Die Elemente pro Seite sind auf drei festgelegt.

In der Vorlage studentlist.html wird die Seitennavigation durch Hinzufügen von tmpl_context.paginators.entries.pager () unter der Direktive py: for aktiviert. Der Code für diese Vorlage sollte wie folgt lauten:

<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>

Eingeben http://localhost:8080/listrecim Browser. Die erste Seite der Datensätze in der Tabelle wird angezeigt. Oben in dieser Tabelle werden auch Links zu Seitenzahlen angezeigt.

So fügen Sie Datagrid Paginierungsunterstützung hinzu

Es ist auch möglich, Datagrid um Paginierungsunterstützung zu erweitern. Im folgenden Beispiel dient das paginierte Datagrid zur Anzeige der Aktionsschaltfläche. Um die Aktionsschaltfläche zu aktivieren, wird das Datagrid-Objekt mit folgendem Code erstellt:

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)))) ])

Hier ist die Aktionsschaltfläche mit dem Namensparameter jeder Zeile im Datenraster verknüpft.

Schreiben Sie die um showgrid() Funktion wie folgt -

@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)

Der Browser zeigt paginiertes Datagrid wie folgt an:

Durch Klicken auf die Schaltfläche Bearbeiten in der dritten Zeile wird zur folgenden URL umgeleitet http://localhost:8080/edit?name=Rajesh+Patil