192 votes

Comment utiliser la pagination avec Django classe basée ListViews générique ?

Comment utiliser la pagination avec Django 1.3 ?

La documentation n’est pas très claire là-dessus.

  • Ce qui se passe à mon `` ?
  • Ce qui se passe à mon modèle ?
  • Ce qui se passe dans mon fichier URLconf ?

352voto

ervin Points 1551

Je pense que vous demandez pour plus d'informations sur l'utilisation de la pagination avec la nouvelle classe de vues, depuis, avec des fonctions traditionnelles de vues, il est facile à trouver. J'ai trouvé que, tout en définissant l' paginate_by variable est suffisant pour activer la pagination. Voir dans la Classe de base des vues génériques.

Par exemple, dans votre views.py:

import models
from django.views.generic import ListView

class CarListView(ListView):
    model = models.Car      # shorthand for setting queryset = models.Car.objects.all()
    template_name = 'app/car_list.html'  # optional (the default is app_name/modelNameInLowerCase_list.html; which will look into your templates folder for that path and file)
    context_object_name = "car_list"    #default is object_list as well as model's_verbose_name_list and/or model's_verbose_name_plural_list, if defined in the model's inner Meta class
    paginate_by = 10  #and that's it !!

Dans votre template (car_list.html), vous pouvez inclure une section pagination comme ceci (nous avons des variables de contexte disponibles: is_paginated, page_obj, et paginator).

{# .... **Normal content list, maybe a table** .... #}
{% if car_list %}
    <table id="cars">
        {% for car in car_list %}
            <tr>
                <td>{{ car.model }}</td>
                <td>{{ car.year }}</td>
                <td><a href="http://stackoverflow.com/car/{{ car.id }}/" class="see_detail">detail</a></td>
            </tr>
        {% endfor %}
    </table>
    {# .... **Now the pagination section** .... #}
    {% if is_paginated %}
        <div class="pagination">
            <span class="page-links">
                {% if page_obj.has_previous %}
                    <a href="http://stackoverflow.com/cars?page={{ page_obj.previous_page_number }}">previous</a>
                {% endif %}
                <span class="page-current">
                    Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
                </span>
                {% if page_obj.has_next %}
                    <a href="http://stackoverflow.com/cars?page={{ page_obj.next_page_number }}">next</a>
                {% endif %}
            </span>
        </div>
    {% endif %}
{% else %}
    <h3>My Cars</h3>
    <p>No cars found!!! :(</p>
{% endif %}
{# .... **More content, footer, etc.** .... #}

La page à afficher est indiqué par un paramètre GET, l'ajout d' ?page=n, à l'URL.

-3voto

Silver Light Points 9397

Fondamentalement, la pagination ne fait qu’ajouter un paramètre GET à votre chaîne de requête, cela signifie que rien ne doit être modifiée en URLconf pour elle de travailler.

En ce qui concerne les vues et les modèles, j’ai trouver documentation très claire :

Vue

Modèle

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X