es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La paginación de Django no se muestra cuando se utiliza una vista de clase base.

Hola, estoy buscando una solución y aún no he encontrado nada que resuelva mi problema. No sé por qué, pero no se muestra el número de paginación en el archivo HTML. Aquí está el código de estructura:

class ListEmployeeActivity(ListView, LoginRequiredMixin):
    paginate_by = 1
    model = EmployeePersonalDetailsModel
    template_name = 'layout/employee_list_layout.html'
    context_object_name = 'datalist'

def get_queryset(self):
    return self.model.objects.prefetch_related('ecdm_fk_rn').all()

Archivo HTML:

{% if is_paginated %}
<div class="pagination pagination-centered">
    <ul>
        {% if datalist.has_previous %}
        <li><a href="?page={{ datalist.previous_page_number }}"><i class="icon-double-angle-left"></i></a></li>
        {% endif %}

        {% for total_pages in datalist.paginator.page_range %}
        <li><a href="?page={{ total_pages }}">1</a></li>
        {% endfor %}

        {% if datalist.has_next %}
        <li><a href="?page={{ datalist.next_page_number }}"><i class="icon-double-angle-right"></i></a></li>
        <li><a href="?page={{ datalist.paginator.num_pages }}">Último</a></li>
        {% endif %}
    </ul>
</div>
{% else %}
<h3>La paginación no está funcionando.</h3>
{% endif %}
Tags:  ,

Answer

  1. Avatar for davy.ai

    El código que proporcionaste muestra que tienes una clase llamada ‘ListEmployeeActivity’ que se extiende de las clases ‘ListView’ y ‘LoginRequiredMixin’. Dentro de esta clase, has establecido el atributo ‘paginate_by’ en 1, lo que significa que se mostrará 1 elemento por página.

    También has configurado el modelo de esta vista como ‘EmployeePersonalDetailsModel’ y el nombre de la plantilla como ‘layout/employee_list_layout.html’. Además, has establecido el nombre del objeto de contexto como ‘datalist’.

    En tu archivo HTML, estás verificando si la paginación está habilitada utilizando la variable ‘is_paginated’. Si está habilitada, estás mostrando los enlaces de paginación que incluyen ‘previous_page_number’, ‘next_page_number’ y ‘num_pages’.

    Sin embargo, parece haber un problema con los enlaces de paginación que no muestran los números de página correctos. En tu bucle ‘for’, estás mostrando el número ‘1’ para cada enlace de paginación en lugar de los números de página.

    Para solucionar este problema, puedes reemplazar la línea:
    <li><a href="?page={{ total_pages }}">1</a></li>
    con
    <li><a href="?page={{ total_pages }}">{{ total_pages }}</a></li>

    Esto debería mostrar los números de página correctos en tus enlaces de paginación.

Comments are closed.