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

Configurar el Panel de Administración de Django

El panel de administración de Django se puede personalizar para mostrar las tablas  de la base de datos que configuran nuestra aplicación. De esta forma podemos gestionar dichas tablas de manera sencilla desde dicho panel.

Para modificar dicha configuración debemos acceder al archivo “admin.py“, este archivo se genera automáticamente al crear nuestra app con el comando:

python manage.py startapp notifications

Notifications” es el nombre que le damos a nuestra app.

Debemos añadir al archivo nombrado anteriormente, “admin.py“, las siguientes lineas:

from notifications.models import Notificaciones

En este caso, nuestro modelo de tabla se llama Notificaciones.

Debemos crear una clase, la cual contendrá las configuraciones a realizar, nuestra clase se llama NotificacionesAdmin, y queda de la siguiente forma.

class NotificacionesAdmin(admin.ModelAdmin):
    list_display = ("nombre", "tipo", "repetir", "dias_semana", "dias", "activo", "rep_dia_mes", "hora", "fecha", "minutos")
    search_fields = ("nombre", "tipo", "activo")
    list_filter = ("tipo", "activo", "fecha")
    date_hierarchy = "fecha"
    ordering = ("nombre", )

Describimos las diferentes configuraciones:

  • list_display – Muestra los campos de la tabla, al seleccionar dicha tabla. Todos los campo que incluyamos serán mostrados.
  • search_fields – Indicamos los campos por los cuales vamos a poder realizar búsquedas.
  • list_filter – Nos permite utilizar los campos especificados para realizar filtros. Ya que el filtro mostrara los diferentes valores almacenados en dicho campo, muy util cuando dichos valores son muy concretos, y especialmente util para campos tipo fecha, ya que nos permitirá realizar filtros automáticamente por; hoy, últimos 7 días, este mes, este año, etc.
  • date_hierarchy = “fecha” – Si nuestra tabla dispone de un campo tipo fecha, esta opción nos permite mostrar las diferentes posibilidades de filtrado, una vez seleccionado un filtro inicial. Si por ejemplo seleccionamos filtrar por “este mes“, el componente “date_hierarchy” nos mostrara todos los días de dicho mes que se encuentren presentes en la información filtrada, al pulsar sobre dicho día, mostrara todos los registros pertenecientes a ese día.
  • ordering – Nos permite por defecto mostrar la información ordenada por dicho campo.

Si pulsamos en cada campo de la tabla generada, podemos ordenar la información por dicha tabla, en orden ascendente o descendente.

A continuación añadimos la siguiente linea:

admin.site.register(Notificaciones, NotificacionesAdmin)

En esta linea el primer parámetro corresponde a nuestro modelo y el segundo parámetro a la clase creada anteriormente, que contiene la configuración.

El resultado será algo similar a lo siguiente.

Ya disponemos de nuestro entorno de administración configurado para poder trabajar comodamente desde el.

En este enlace puedes encontrar todos los parametros de configuración para personalizar completamente tu entorno de administración.



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