Paginar dinámicamente tablas con formulario de búsqueda

2,274 views
Skip to first unread message

Lucho Flores

unread,
May 25, 2013, 12:21:11 PM5/25/13
to djan...@googlegroups.com
Hola amigos cómo están, si me pueden ayudar con una duda, estoy haciendo un template en el que se muestre una tabla con todos los registros de mi base de datos la primera vez que se renderice la página. Esa página tiene un formulario de búsqueda, que me carga en la tabla los datos según mi criterio de búsqueda, el problema en que deseo que mi búsqueda se haga paginable, pero cada vez que le doy siguiente a la paginación me vuelve a cargar toda la lista y no los datos de mi consulta



Aqui el código:

vista:

def feligres_view(request):
logging.info(request.GET)
query = request.GET.get('q', '')
if query:
qset = (
Q(nombre__contains=query)| 
Q(apellidos__contains=query)|
Q(cedula__contains=query)|
Q(sexo__contains=query)
)

feligreses=Feligres.objects.filter(qset)
paginator = Paginator(feligreses, 1)
page = request.GET.get('page')
lista = list()

for x in xrange(1,paginator.num_pages):
lista.append(x)
try:
feligreseslist = paginator.page(page)
ctx={'list_feligreses':feligreseslist, 'lista':lista}
except PageNotAnInteger:
feligreseslist = paginator.page(1)
ctx={'list_feligreses':feligreseslist, 'lista':lista}
except EmptyPage:
feligreseslist = paginator.page(paginator.num_pages)
ctx={'list_feligreses':feligreseslist, 'lista':lista}
else:
  feligreses=Feligres.objects.all().order_by('-cedula')
paginator = Paginator(feligreses, 1)
page = request.GET.get('page')
lista = list()

for x in xrange(1,paginator.num_pages):
lista.append(x)

    try:
        feligreseslist = paginator.page(page)
        ctx={'list_feligreses':feligreseslist, 'lista':lista}
    except PageNotAnInteger:
        feligreseslist = paginator.page(1)
        ctx={'list_feligreses':feligreseslist, 'lista':lista}
    except EmptyPage:
    feligreseslist = paginator.page(paginator.num_pages)
    ctx={'list_feligreses':feligreseslist, 'lista':lista}
return render(request,'feligres/feligres.html',ctx)




template:

<form action="." class="form-search" method='GET'>
{%csrf_token%}
<input type="text" class="input-medium search-query" name="q">
<input id='id_buscar' type="submit" value="Buscar" class="btn btn-primary">
</form>

<p href="">
Página  {{ list_feligreses.number }} de {{ list_feligreses.paginator.num_pages }}
</p>

<table class='table table-bordered table-striped'>
<th>Nombres</th>
<th>Cedula</th>
<th>Sexo</th>
<th>Acciones</th>

{%for f in list_feligreses%}
<tr>
<td><a href="{{f.get_absolute_url}}">{{f.nombre}} {{f.apellidos}}</a></td>
<td>{{f.cedula}}</td>
<td>{{f.sexo}}</td>
<td><a class='id_delete' href="#myModal" role="button" data-toggle="modal" name='{{f.id}}'>eliminar modal</a>
</td>
</tr>
{%empty%}

<tr>
<td colspan="4">
No se encontro ningun registro
</td>
</tr>


{%endfor%}
</table>

<div class="pagination">
<ul>

{% if list_feligreses.has_previous %}
<li><a href="?page={{ list_feligreses.previous_page_number }}">Anterior</a>
{% endif %}
</li>

{%for p in lista%}
<li><a href="?page={{p}}">{{p}}</a></li>
{%endfor%}

<li>
{% if list_feligreses.has_next %}
<a href="?page={{ list_feligreses.next_page_number }}">Siguiente</a>
{% endif %}
</li>
</ul>
</div>


Javier Ramirez

unread,
May 27, 2013, 6:28:23 PM5/27/13
to djan...@googlegroups.com

Esto lo tengo que probar como se ve?

Desde el móvil disculpe las molestias

El 27/05/2013 23:17, "Juan Francisco Roco" <jfr...@gmail.com> escribió:
Hola,

Yo uso http://www.datatables.net/ un plugin para JQuery que permite filtrar, buscar, ordenar por columnas, compaginar, etc. en el lado cliente y no en el lado servidor (lo que siempre es bueno).

Saludos

JF

Ejemplo de template en Django:

...
<script type="text/javascript" language="javascript" src="/static/jquery.dataTables.js"></script>
...
<script>
$(document).ready(function(){
    $('#tableReservas').dataTable();
});
</script>
...
<table cellpadding="0" cellspacing="0" border="0" class="display" id="tableReservas">
<thead>
<tr>
<th>Correlativo</th>
<th>Nombre</th>
<th>Inicio</th>
<th>Termino</th>
<th>Solicitante</th>
<th>Estatus</th>
    </tr>
</thead>
<tbody>
{% for reserva in reservas %}
<tr>
<td><a href='reserva/{{ reserva.id }}/'>{{ reserva }}</a></td>
<td>{{ reserva.nombre }}</td>
<td class="localtime">{{ reserva.inicio|date:"Y/m/d H:i" }}</td>
<td class="localtime">{{ reserva.termino|date:"Y/m/d H:i" }}</td>
<td>{{reserva.solicitante }}</td>
<td>{{ reserva.estatus }}</td>
</tr>
{% endfor %}
</tbody>
</table>

--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito al grupo "Django-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a django-es+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Juan Francisco Roco

unread,
May 27, 2013, 9:57:35 PM5/27/13
to djan...@googlegroups.com
Hola Javier,

Probarlo es trivial, no necesitas nada sólo ir a la página de datatable: http://www.datatables.net/ desde tu móvil.

De todas maneras adjunto foto de mi tablet (Android 3.1 + Dolphin browser)

Saludos

JF
booking.jpg

Javier Ramirez

unread,
May 28, 2013, 3:00:50 AM5/28/13
to djan...@googlegroups.com

Se ve guapo lo probaré gracias

Desde el móvil disculpe las molestias

Lucho Flores

unread,
May 28, 2013, 3:53:47 PM5/28/13
to djan...@googlegroups.com
Muchas gracias Juan Francisco, ya había oído de ese plugin, pero no lo utilicé nunca, hasta que me hiciste acuerdo de su existencia, no pensé que su uso sea tan fácil, me permite ordenar, paginar, filtrar y personalizar los mensajes de manera muy dinámica, en verdad que vale la pena este pluging. Aún me sigue quedando la duda de cómo lo hubiese hecho con django, pero en fin, si este plugin ya lo hace todo, entonces hay que aprovecharlo. 
Les adjunto una imagen de cómo me quedó la tabla con el estilo de bootstrap.


Nota: el plugin me permite también trabajar con ajax.


René Rolando Elizalde Solano

unread,
May 31, 2013, 5:08:58 PM5/31/13
to djan...@googlegroups.com
django-table2 .. será que te puede ayudar para lo que deseas hacer?


--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito al grupo "Django-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a django-es+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 



--
René Rolando Elizalde Solano
Ingeniero en Sistemas
Analísta - Programador
PYTHON, HTML, CSS, JQUERY, SQLALCHEMY



Manuel Gutierrez

unread,
Aug 27, 2013, 10:28:07 AM8/27/13
to djan...@googlegroups.com
Yo uso lo mismo .. pero no sale ... tengo un problema con el tag for ... que podria ser?

<tbody>
                {%for registro in lista%}    
                <tr  class="gradeA">
                    <td>{{registro.id}}</td>
                    <td>{{registro.nombre}}</td>
                    <td>{{registro.created}}</td>
                    <td>{{registro.updated}}</td>
                </tr>
                {% endfor%}
</tbody>   
Reply all
Reply to author
Forward
0 new messages