Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/06/2013, 13:17
josepbidegain
 
Fecha de Ingreso: enero-2013
Ubicación: Montevideo
Mensajes: 28
Antigüedad: 11 años, 9 meses
Puntos: 1
Paginación con python/django y html

Hola como va, tengo el siguiente problema, tengo que paginar por ejemplo "socios" de un sitio, por ejemplo tengo que mostrar 10 por pagina, y debo mostrar el indice como maximo con 10 paginas, estoy haciendo todo esto correctamente con el codigo que voy a pegar ahora despues, el problema esta en cuando supero las 10 paginas como hago para mover el indice por ejemplo si estoy parado en la pagina 6, que me muestre como inicio la 2 y como final la 11, se entiende?
Pego el codigo que tengo:

en la views tengo la vista de socios:

Código Python:
Ver original
  1. def socios(request):
  2.     copia = {}
  3.     sociosAux = Socio.objects.all().order_by("nombre")[:10]    
  4.     socios = []
  5.     for s in sociosAux:
  6.         soc = {'id':s.id, 'nombre':s.nombre, 'logo':str(s.logo).replace("\\","/"), 'rubro':str(s.rubro),\ 'direccion':s.direccion, 'telefono':s.telefono, 'web':s.web, 'mail':s.mail}        
  7.         socios.append(soc)  
  8.    
  9.     socios_per_page = 10
  10.    
  11.     cant_socios = len ( Socio.objects.all() )        
  12.     cant_pages = math.ceil( float(cant_socios)  /  float( socios_per_page ) )
  13.  
  14.     total_pages_mostrar = 10
  15.    
  16.     if cant_pages > total_pages_mostrar:
  17.         copia['cant_pages_nums'] = range( 1, total_pages_mostrar + 1 )
  18.     else:
  19.         copia['cant_pages_nums'] = range( 1, int( cant_pages )+1 )
  20.        
  21.     copia['socios'] = socios
  22.     copia['cant_pages'] = int( cant_pages )    
  23.     copia['cantidad_socios'] = cant_socios
  24.     return render_to_response("socios.html",copia)


en socios.html tengo esto:

Código HTML:
Ver original
  1. {% if cant_pages > 1 %}
  2.             <div class="paginacion">
  3.                 <ul>
  4.                 {% for i in cant_pages_nums %}
  5.                     {% if i == 1 %}          
  6.                         <li><a class="num_page activo" data-id="{{i}}" href="#">{{i}}</a></li>
  7.                     {% else %}
  8.                         <li><a class="num_page" data-id="{{i}}" href="#">{{i}}</a></li>
  9.                     {% endif %}
  10.                 {% endfor %}
  11.                   <!--<li class="ultimo"><a href="#">Fin</a></li>-->
  12.                 </ul>  
  13.             </div> <!--termina paginacion-->
  14.         {% endif %}

en el document.ready de socios.html tengo esto:
Código Javascript:
Ver original
  1. //PAGINAR SOCIOS
  2.     $(".num_page").on("click", function(e){    
  3.         e.preventDefault();
  4.                
  5.         //ESTILO A PAGINACION      
  6.         $(".num_page").each(function(){
  7.              $(this).removeClass( "activo" );
  8.         });    
  9.         //$(this).addClass( "activo" );    
  10.         var id = $(this).attr("data-id");
  11.         $("a.num_page[data-id ="+ id+"]").addClass("activo");
  12.        
  13.         var toData = {         
  14.             'page' : $(this).attr("data-id")
  15.             };     
  16.                
  17.         $.ajax({
  18.                 type: "GET",
  19.                 url: "/iab/paginar-socios",
  20.                 data: toData,              
  21.         }).done(function( msg ) {
  22.                 $("#contSocios").html(msg);
  23.             });            
  24.    
  25.     });//termina .num_page.click

Por ahora funciona bien la paginacion, pero quiero limitar la cantidad de paginas a mostrar en el indice, y a medida que se vaya moviendo, que vaya cambiando el indice...

Espero alguna sugerencia, gracias.