OUJOOD.COM
Afficher 500 articles sur une seule page est une mauvaise idée. Cela ralentit le chargement, consomme de la bande passante inutilement et perd votre visiteur dans un défilement infini. La solution est de découper ces données en petits morceaux : c'est ce qu'on appelle la pagination. Django propose pour cela une classe très simple nommée Paginator.
Comment fonctionne Paginator ?
Le principe est basique. Vous donnez à Django votre liste complète d'objets et le nombre d'éléments que vous voulez voir par page. Django calcule alors tout seul le nombre de pages nécessaires et s'occupe de récupérer uniquement les bons objets pour la page demandée.
from django.core.paginator import Paginator
from django.shortcuts import render
from .models import Article
def liste_articles(request):
liste_complete = Article.objects.all()
# On veut 10 articles par page
paginator = Paginator(liste_complete, 10)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, 'liste.html', {'page_obj': page_obj})
Affichage dans le template
Dans votre fichier HTML, vous n'allez plus boucler sur la liste complète, mais sur page_obj. Pour permettre à l'utilisateur de naviguer, il faut ajouter des liens "Précédent" et "Suivant". Je vous suggère d'utiliser les méthodes has_previous et has_next pour n'afficher les boutons que lorsqu'ils sont utiles.
{% for article in page_obj %}
<p>{{ article.titre }}</p>
{% endfor %}
<div class="pagination">
{% if page_obj.has_previous %}
<a href="?page={{ page_obj.previous_page_number }}">Précédent</a>
{% endif %}
<span>Page {{ page_obj.number }} sur {{ page_obj.paginator.num_pages }}</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">Suivant</a>
{% endif %}
</div>
Gérer les erreurs de page
Que se passe-t-il si un utilisateur tape ?page=999 alors qu'il n'y a que 5 pages ? La méthode get_page() est intelligente : si le numéro est trop grand, elle renvoie la dernière page. Si ce n'est pas un nombre, elle renvoie la première. Cela évite de faire planter votre site pour une simple erreur d'URL.
La pagination rend votre site plus fluide. Pour continuer à améliorer l'interaction avec vos membres, nous allons voir comment leur envoyer des alertes visuelles grâce au système de messages Django.
Par carabde | Mis à jour le 08/05/2026