{"title":"Pagination","version":"4.1","locale":"fr","docname":"ref/paginator","url":"/fr/4.1/ref/paginator/","canonical":"https://djangodocs.dev/fr/4.1/ref/paginator/","summary":"Django propose quelques classes pour aider à gérer des données paginées, c’est-à-dire des données divisées en plusieurs pages avec des liens « Précédent/Suivant ».…","html":"<h1>Pagination<a class=\"heading-anchor\" href=\"#paginator\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django propose quelques classes pour aider à gérer des données paginées, c’est-à-dire des données divisées en plusieurs pages avec des liens « Précédent/Suivant ». Ces classes se trouvent dans <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/4.1.x/django/core/paginator.py\">django/core/paginator.py</a>.</p>\n<p>Pour des exemples, consultez le <a class=\"reference internal\" href=\"/fr/4.1/topics/pagination/\"><span class=\"doc\">guide thématique sur la pagination</span></a>.</p>\n<section id=\"paginator-class\">\n<span id=\"module-django.core.paginator\"></span><h2>Classe <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code><a class=\"heading-anchor\" href=\"#paginator-class\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Paginator</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">object_list</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">per_page</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">orphans</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">0</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">allow_empty_first_page</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un paginateur se comporte comme une liste d’objets <a class=\"reference internal\" href=\"#django.core.paginator.Page\" title=\"django.core.paginator.Page\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Page</span></code></a> lorsqu’on lui applique <code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> ou qu’on itère directement sur lui.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator.object_list\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Paginator.</span></span><span class=\"sig-name descname\"><span class=\"pre\">object_list</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator.object_list\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Obligatoire. Une liste, un tuple, un <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> ou tout autre objet segmentable et doté d’une méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">__len__()</span></code>. Pour une pagination cohérente, les <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> doivent être triés, par ex. avec une clause <a class=\"reference internal\" href=\"/fr/4.1/ref/models/querysets/#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a> ou avec un tri par défaut <a class=\"reference internal\" href=\"/fr/4.1/ref/models/options/#django.db.models.Options.ordering\" title=\"django.db.models.Options.ordering\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">ordering</span></code></a> sur le modèle.</p>\n<aside class=\"admonition-performance-issues-paginating-large-queryset-s admonition\">\n<p class=\"admonition-title\">Problèmes de performances avec la pagination de <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> volumineux</p>\n<p>Si vous utilisez un <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> avec un très grand nombre d’éléments, la récupération de numéros de page élevés peut être lent avec certaines bases de données, car la requête <code class=\"docutils literal notranslate\"><span class=\"pre\">LIMIT</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">OFFSET</span></code> résultante a besoin de compter le nombre d’enregistrements <code class=\"docutils literal notranslate\"><span class=\"pre\">OFFSET</span></code>, ce qui prend plus de temps avec des numéros de page élevés.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator.per_page\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Paginator.</span></span><span class=\"sig-name descname\"><span class=\"pre\">per_page</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator.per_page\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Obligatoire. Le nombre maximum d’éléments à inclure dans une page, sans tenir compte des orphelins (voir le paramètre facultatif <a class=\"reference internal\" href=\"#django.core.paginator.Paginator.orphans\" title=\"django.core.paginator.Paginator.orphans\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">orphans</span></code></a> ci-dessous).</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator.orphans\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Paginator.</span></span><span class=\"sig-name descname\"><span class=\"pre\">orphans</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator.orphans\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Facultatif. Utilisez ce paramètre lorsque vous ne souhaitez pas de dernière page avec très peu d’éléments. Lorsque la dernière page ne contient que le nombre <code class=\"docutils literal notranslate\"><span class=\"pre\">orphans</span></code> d’éléments ou moins, ces éléments sont alors ajoutés à la page précédente (qui devient la dernière page) au lieu de les laisser seuls sur une page. Par exemple, avec 23 éléments, <code class=\"docutils literal notranslate\"><span class=\"pre\">per_page=10</span></code>  et <code class=\"docutils literal notranslate\"><span class=\"pre\">orphans=3</span></code>, il y aura deux pages ; la première avec 10 éléments et la seconde (et dernière) avec 13 éléments. <code class=\"docutils literal notranslate\"><span class=\"pre\">orphans</span></code> vaut zéro par défaut, ce qui signifie que les pages ne sont jamais jointes et que la dernière page peut ne posséder qu’un seul élément.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator.allow_empty_first_page\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Paginator.</span></span><span class=\"sig-name descname\"><span class=\"pre\">allow_empty_first_page</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator.allow_empty_first_page\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Facultatif. Indique si la première page peut être vide. Avec la valeur <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> et une liste <code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code> vide, une erreur <code class=\"docutils literal notranslate\"><span class=\"pre\">EmptyPage</span></code> sera produite.</p>\n</dd></dl>\n\n<section id=\"methods\">\n<h3>Méthodes<a class=\"heading-anchor\" href=\"#methods\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator.get_page\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Paginator.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_page</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">number</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator.get_page\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie un objet <a class=\"reference internal\" href=\"#django.core.paginator.Page\" title=\"django.core.paginator.Page\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Page</span></code></a> correspondant à l’index <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code> (commençant à 1), en gérant également les numéros de page non valides ou hors limites.</p>\n<p>Si la page n’est pas un nombre, la première page est renvoyée. Si le numéro de page est négatif ou plus grand que le nombre de pages, c’est la dernière page qui est renvoyée.</p>\n<p>Ne produit une exception <a class=\"reference internal\" href=\"#django.core.paginator.EmptyPage\" title=\"django.core.paginator.EmptyPage\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">EmptyPage</span></code></a> que si vous indiquez <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator(...,</span> <span class=\"pre\">allow_empty_first_page=False)</span></code> et que <code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code> est vide.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator.page\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Paginator.</span></span><span class=\"sig-name descname\"><span class=\"pre\">page</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">number</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator.page\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie un objet <a class=\"reference internal\" href=\"#django.core.paginator.Page\" title=\"django.core.paginator.Page\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Page</span></code></a> correspondant à l’index <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code> (commençant à 1). Si <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code> ne peut pas être converti en nombre entier avec <code class=\"docutils literal notranslate\"><span class=\"pre\">int()</span></code>, une exception <a class=\"reference internal\" href=\"#django.core.paginator.PageNotAnInteger\" title=\"django.core.paginator.PageNotAnInteger\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">PageNotAnInteger</span></code></a> est produite. Si le numéro de page indiqué n’existe pas, une exception <a class=\"reference internal\" href=\"#django.core.paginator.EmptyPage\" title=\"django.core.paginator.EmptyPage\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">EmptyPage</span></code></a> est produite.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator.get_elided_page_range\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Paginator.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_elided_page_range</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">number</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">on_each_side</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">3</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">on_ends</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">2</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator.get_elided_page_range\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie une liste (commençant à 1) de numéros de pages comme avec <a class=\"reference internal\" href=\"#django.core.paginator.Paginator.page_range\" title=\"django.core.paginator.Paginator.page_range\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Paginator.page_range</span></code></a> mais peut appliquer une élision avant et après le numéro de page actuel lorsque <a class=\"reference internal\" href=\"#django.core.paginator.Paginator.num_pages\" title=\"django.core.paginator.Paginator.num_pages\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Paginator.num_pages</span></code></a> est grand.</p>\n<p>Le nombre de pages à inclure de part et d’autre du numéro de page actuel est déterminé par l’argument <code class=\"docutils literal notranslate\"><span class=\"pre\">on_each_side</span></code> qui vaut 3 par défaut.</p>\n<p>Le nombre de pages à inclure au début et à la fin de l’intervalle de pages est déterminé par l’argument <code class=\"docutils literal notranslate\"><span class=\"pre\">on_ends</span></code> qui vaut 2 par défaut.</p>\n<p>Par exemple, avec les valeurs par défaut pour <code class=\"docutils literal notranslate\"><span class=\"pre\">on_each_side</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">on_ends</span></code>, si la page actuelle est 10 et qu’il y a 50 pages, l’intervalle de pages sera <code class=\"docutils literal notranslate\"><span class=\"pre\">[1,</span> <span class=\"pre\">2,</span> <span class=\"pre\">'…',</span> <span class=\"pre\">7,</span> <span class=\"pre\">8,</span> <span class=\"pre\">9,</span> <span class=\"pre\">10,</span> <span class=\"pre\">11,</span> <span class=\"pre\">12,</span> <span class=\"pre\">13,</span> <span class=\"pre\">'…',</span> <span class=\"pre\">49,</span> <span class=\"pre\">50]</span></code>. On trouve donc les pages 7, 8, 9 à la gauche et les pages 11, 12, 13 à la droite de la page actuelle, avec les pages 1, 2 au début et 49, 50 à la fin.</p>\n<p>Génère <a class=\"reference internal\" href=\"#django.core.paginator.InvalidPage\" title=\"django.core.paginator.InvalidPage\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">InvalidPage</span></code></a> si le numéro de page indiqué n’existe pas.</p>\n</dd></dl>\n\n</section>\n<section id=\"attributes\">\n<h3>Attributs<a class=\"heading-anchor\" href=\"#attributes\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator.ELLIPSIS\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Paginator.</span></span><span class=\"sig-name descname\"><span class=\"pre\">ELLIPSIS</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator.ELLIPSIS\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une chaîne traduisible utilisée comme substituant pour l’élision des numéros de pages dans l’intervalle de pages renvoyé par <a class=\"reference internal\" href=\"#django.core.paginator.Paginator.get_elided_page_range\" title=\"django.core.paginator.Paginator.get_elided_page_range\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_elided_page_range()</span></code></a>. La valeur par défaut est <code class=\"docutils literal notranslate\"><span class=\"pre\">'…'</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator.count\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Paginator.</span></span><span class=\"sig-name descname\"><span class=\"pre\">count</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator.count\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le nombre total d’objets sur toutes les pages.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Lors de la détermination du nombre d’objets contenus dans <code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> essaie d’abord d’appeler <code class=\"docutils literal notranslate\"><span class=\"pre\">object_list.count()</span></code>. Si <code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code> n’a pas de méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> se rabat sur <code class=\"docutils literal notranslate\"><span class=\"pre\">len(object_list)</span></code>. Cela permet à des objets comme les <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> d’utiliser une méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> plus efficace le cas échéant.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator.num_pages\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Paginator.</span></span><span class=\"sig-name descname\"><span class=\"pre\">num_pages</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator.num_pages\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le nombre total de pages.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator.page_range\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Paginator.</span></span><span class=\"sig-name descname\"><span class=\"pre\">page_range</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator.page_range\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une itération d’intervalle de numéros de pages commençant à 1, par ex. produisant <code class=\"docutils literal notranslate\"><span class=\"pre\">[1,</span> <span class=\"pre\">2,</span> <span class=\"pre\">3,</span> <span class=\"pre\">4]</span></code>.</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"page-class\">\n<h2>Classe <code class=\"docutils literal notranslate\"><span class=\"pre\">Page</span></code><a class=\"heading-anchor\" href=\"#page-class\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les objets <code class=\"docutils literal notranslate\"><span class=\"pre\">Page</span></code> ne sont normalement pas construits manuellement, mais plutôt obtenus en itérant sur <a class=\"reference internal\" href=\"#django.core.paginator.Paginator\" title=\"django.core.paginator.Paginator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Paginator</span></code></a> ou en appelant <a class=\"reference internal\" href=\"#django.core.paginator.Paginator.page\" title=\"django.core.paginator.Paginator.page\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Paginator.page()</span></code></a>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Page\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Page</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">object_list</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">number</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">paginator</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Page\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une page se comporte comme un liste de <a class=\"reference internal\" href=\"#django.core.paginator.Page.object_list\" title=\"django.core.paginator.Page.object_list\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Page.object_list</span></code></a> lorsqu’on lui applique <code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> ou qu’on effectue une itération sur elle.</p>\n</dd></dl>\n\n<section id=\"id1\">\n<h3>Méthodes<a class=\"heading-anchor\" href=\"#id1\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Page.has_next\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Page.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_next</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Page.has_next\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> s’il existe une page suivante.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Page.has_previous\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Page.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_previous</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Page.has_previous\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> s’il existe une page précédente.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Page.has_other_pages\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Page.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_other_pages</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Page.has_other_pages\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> s’il existe une page suivante <strong>ou</strong> une page précédente.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Page.next_page_number\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Page.</span></span><span class=\"sig-name descname\"><span class=\"pre\">next_page_number</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Page.next_page_number\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie le prochain numéro de page. Génère <a class=\"reference internal\" href=\"#django.core.paginator.InvalidPage\" title=\"django.core.paginator.InvalidPage\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">InvalidPage</span></code></a> s’il n’y a pas de page suivante.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Page.previous_page_number\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Page.</span></span><span class=\"sig-name descname\"><span class=\"pre\">previous_page_number</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Page.previous_page_number\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie le numéro de page précédent. Génère <a class=\"reference internal\" href=\"#django.core.paginator.InvalidPage\" title=\"django.core.paginator.InvalidPage\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">InvalidPage</span></code></a> s’il n’y a pas de page précédente.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Page.start_index\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Page.</span></span><span class=\"sig-name descname\"><span class=\"pre\">start_index</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Page.start_index\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie l’index (commençant par 1) du premier objet de la page, relatif à tous les autres objets de la liste du paginateur. Par exemple, lors de la pagination d’une liste de 5 objets par groupes de 2, la méthode <a class=\"reference internal\" href=\"#django.core.paginator.Page.start_index\" title=\"django.core.paginator.Page.start_index\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">start_index()</span></code></a> de la deuxième page renverrait <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Page.end_index\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Page.</span></span><span class=\"sig-name descname\"><span class=\"pre\">end_index</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Page.end_index\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie l’index (commençant par 1) du dernier objet de la page, relatif à tous les autres objets de la liste du paginateur. Par exemple, lors de la pagination d’une liste de 5 objets par groupes de 2, la méthode <a class=\"reference internal\" href=\"#django.core.paginator.Page.end_index\" title=\"django.core.paginator.Page.end_index\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">end_index()</span></code></a> de la deuxième page renverrait <code class=\"docutils literal notranslate\"><span class=\"pre\">4</span></code>.</p>\n</dd></dl>\n\n</section>\n<section id=\"id2\">\n<h3>Attributs<a class=\"heading-anchor\" href=\"#id2\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Page.object_list\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Page.</span></span><span class=\"sig-name descname\"><span class=\"pre\">object_list</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.Page.object_list\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La liste des objets de cette page.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Page.number\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Page.</span></span><span class=\"sig-name descname\"><span class=\"pre\">number</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.Page.number\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le numéro de page (commençant par 1) de cette page.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Page.paginator\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Page.</span></span><span class=\"sig-name descname\"><span class=\"pre\">paginator</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.Page.paginator\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>L’objet <a class=\"reference internal\" href=\"#django.core.paginator.Paginator\" title=\"django.core.paginator.Paginator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Paginator</span></code></a> associé.</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"exceptions\">\n<h2>Exceptions<a class=\"heading-anchor\" href=\"#exceptions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py exception\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.InvalidPage\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">exception</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">InvalidPage</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.InvalidPage\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une classe de base pour les exceptions levées lorsqu’un paginateur reçoit un numéro de page non valable.</p>\n</dd></dl>\n\n<p>La méthode <a class=\"reference internal\" href=\"#django.core.paginator.Paginator.page\" title=\"django.core.paginator.Paginator.page\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Paginator.page()</span></code></a> lève une exception quand la page demandée n’est pas valable (par ex. pas un nombre entier) ou quand elle ne contient aucun objet. Il est généralement suffisant d’intercepter l’exception <code class=\"docutils literal notranslate\"><span class=\"pre\">InvalidPage</span></code>, mais si vous souhaitez plus de finesse, vous pouvez intercepter l’une des exceptions suivantes :</p>\n<dl class=\"py exception\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.PageNotAnInteger\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">exception</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">PageNotAnInteger</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.PageNotAnInteger\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Générée lorsque <a class=\"reference internal\" href=\"#django.core.paginator.Paginator.page\" title=\"django.core.paginator.Paginator.page\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">page()</span></code></a> reçoit une valeur qui n’est pas un nombre entier.</p>\n</dd></dl>\n\n<dl class=\"py exception\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.EmptyPage\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">exception</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">EmptyPage</span></span><a class=\"heading-anchor\" href=\"#django.core.paginator.EmptyPage\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Générée lorsque <a class=\"reference internal\" href=\"#django.core.paginator.Paginator.page\" title=\"django.core.paginator.Paginator.page\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">page()</span></code></a> reçoit une valeur valable, mais que la page en question ne contient pas d’objet.</p>\n</dd></dl>\n\n<p>Ces deux exceptions sont des sous-classes de <a class=\"reference internal\" href=\"#django.core.paginator.InvalidPage\" title=\"django.core.paginator.InvalidPage\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">InvalidPage</span></code></a>, il est donc possible de les intercepter toutes deux par une ligne <code class=\"docutils literal notranslate\"><span class=\"pre\">except</span> <span class=\"pre\">InvalidPage</span></code>.</p>\n</section>","rootId":"paginator","toc":[{"title":"Classe Paginator","anchor":"paginator-class","children":[{"title":"Méthodes","anchor":"methods","children":[]},{"title":"Attributs","anchor":"attributes","children":[]}]},{"title":"Classe Page","anchor":"page-class","children":[{"title":"Méthodes","anchor":"id1","children":[]},{"title":"Attributs","anchor":"id2","children":[]}]},{"title":"Exceptions","anchor":"exceptions","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/4.1/ref/"}],"prev":{"docname":"ref/models/database-functions","title":"Fonctions de base de données","url":"/fr/4.1/ref/models/database-functions/"},"next":{"docname":"ref/request-response","title":"Les objets requête et réponse","url":"/fr/4.1/ref/request-response/"},"formats":{"html":"/fr/4.1/ref/paginator/","markdown":"/fr/4.1/ref/paginator.md","json":"/fr/4.1/ref/paginator.json"},"source":"https://github.com/django/django/blob/stable/4.1.x/docs/ref/paginator.txt","official":"https://docs.djangoproject.com/fr/4.1/ref/paginator/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}