TurboGears - Paginación

TurboGears proporciona un decorador conveniente llamado paginate () para dividir la salida en las páginas. Este decorador se combina con el decorador expose (). El decorador @Paginate () toma el objeto de diccionario del resultado de la consulta como argumento. Además, el número de registros por página se decide por el valor del atributo items_per_page. Asegúrese de importar la función de paginación de tg.decorators en su código.

Reescriba la función listrec () en root.py de la siguiente manera:

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)

Los elementos por página se establecen en tres.

En la plantilla studentlist.html, la navegación por la página se habilita agregando tmpl_context.paginators.entries.pager () debajo de la directiva py: for. El código para esta plantilla debe ser el siguiente:

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

Entrar http://localhost:8080/listrecen el navegador. Se muestra la primera página de registros de la tabla. En la parte superior de esta tabla, también se ven enlaces a números de página.

Cómo agregar soporte de paginación a Datagrid

También es posible agregar soporte de paginación a datagrid. En el siguiente ejemplo, la cuadrícula de datos paginada está diseñada para mostrar el botón de acción. Para activar el botón de acción, el objeto de cuadrícula de datos se construye con el siguiente código:

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

Aquí, el botón de acción está vinculado al parámetro de nombre de cada fila en la cuadrícula de datos.

Reescribir el showgrid() funciona de la siguiente manera:

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

El navegador muestra la cuadrícula de datos paginada de la siguiente manera:

Al hacer clic en el botón Editar en la tercera fila, se redirigirá a la siguiente URL http://localhost:8080/edit?name=Rajesh+Patil