
En muchos proyectos la paginación resulta esencial, ya que sin dicha función, una pagina web podría ser eterna y no acabar nunca.
Es muy habitual ver las técnicas de paginación en los blog o en las galerías de imágenes. Aunque hoy en día también se utiliza mucho la paginación infinita, puede que tu proyecto no se adapte bien a esta modalidad y precises la clásica paginación manual.
Hoy traemos un código para implementar la paginación en proyectos realizados con Django, pero es muy fácil adaptarlo a otro Framework o lenguaje.
El trabajo duro lo realiza una función, que nos devuelve los valores que serán mostrados en la paginación.
Función Python:
def muestra_paginacion(actual, fin): total = 9 grupo = 4 if fin > 9: if actual - grupo > 1: if actual + grupo >= fin: pag = orden_paginacion(fin - total, total, fin) else: pag = orden_paginacion(actual - grupo, total, fin) else: pag = orden_paginacion(1, total, fin) else: pag = orden_paginacion(1, fin, fin) return pag def orden_paginacion(inicio, total, ultimo): valores = [] x = range(total) for n in x: valores.append(inicio + n) # Si contiene más de 9 if ultimo > 9: decenas = int(ultimo/10) for n in range(decenas): valores.append((n+1)*10) return valores
- Actual. Es la pagina actual.
- Fin. Es el total de paginas.
- Total. La variable total, es el grupo de elementos del 1 al 9.
- Grupo. Especifica el número de elementos a la izquierda y derecha del elemento seleccionado. Ejemplo: 1 – 2 – 3 – 4 – 5 – 6 – 7 – 8 – 9
Ejemplo de como se vera una paginación de 51 paginas, pagina número 1 seleccionada.

Pagina 33 seleccionada.

Código html:
{% if ultimo > 1 %} <span class="paginacion"> <div class="navegacion"> <nav data-pagination> <ul> {% if actual > 5 and ultimo > 9 %} <li><a href="{% url 'Tematica_DVD' tema_buscado %}?page=1">1</a> <li><a href=#10>…</a> {% endif %} {% for n in pag %} {% if n == actual %} <li class=current><a href=#>{{ actual }}</a> {% else %} <li><a href="{% url 'Tematica_DVD' tema_buscado %}?page={{ n }}">{{ n }}</a> {% endif %} {% endfor %} {% if ultimo != actual and ultimo > 9 %} <li><a href=#10>…</a> <li><a href="{% url 'Tematica_DVD' tema_buscado %}?page={{ ultimo }}">{{ ultimo }}</a> {% endif %} </ul> </nav> </div> </span> {% endif %}
Como se ve en la imagen superior, la paginación mostrará las cuatro paginas anteriores y las cuatro posteriores a la pagina seleccionada. también mostrará las decenas de todas las paginas entre la primera y la última, 10,20,30,40….
Cuando la paginación sea inferior a 10, se mostrará de esta forma.
