Paginación con Django y Python

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.



Si encuentras esta noticia interesante la puedes compartir en tus redes sociales, a tus seguidores les puede gustar. Utiliza los botones que tienes más abajo.

Share