{"title":"Pagination","version":"1.10","locale":"fr","docname":"topics/pagination","url":"/fr/1.10/topics/pagination/","canonical":"https://djangodocs.dev/fr/1.10/topics/pagination/","summary":"Django fournit quelques classes qui aident à effectuer de la pagination de données, c’est-à-dire des données qui sont partagées en plusieurs pages, avec des liens «…","html":"<span id=\"pagination\"></span><h1>Pagination<a class=\"heading-anchor\" href=\"#module-django.core.paginator\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django fournit quelques classes qui aident à effectuer de la pagination de données, c’est-à-dire des données qui sont partagées en plusieurs pages, avec des liens « Précédent/Suivant ». Ces classes se trouvent dans <code class=\"file docutils literal notranslate\"><span class=\"pre\">django/core/paginator.py</span></code>.</p>\n<section id=\"example\">\n<h2>Exemple<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>En donnant à <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> une liste d’objets ainsi que le nombre d’éléments souhaités sur chaque page, cette classe vous offre des méthodes pour accéder aux éléments des différentes pages :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.paginator</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Paginator</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;john&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;paul&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;george&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ringo&#39;</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Paginator</span><span class=\"p\">(</span><span class=\"n\">objects</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">count</span>\n<span class=\"go\">4</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">num_pages</span>\n<span class=\"go\">2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page_range</span><span class=\"p\">)</span>  <span class=\"c1\"># `&lt;type &#39;rangeiterator&#39;&gt;` in Python 2.</span>\n<span class=\"go\">&lt;class &#39;range_iterator&#39;&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page_range</span>\n<span class=\"go\">range(1, 3)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page1</span> <span class=\"o\">=</span> <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page1</span>\n<span class=\"go\">&lt;Page 1 of 2&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page1</span><span class=\"o\">.</span><span class=\"n\">object_list</span>\n<span class=\"go\">[&#39;john&#39;, &#39;paul&#39;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page2</span> <span class=\"o\">=</span> <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page2</span><span class=\"o\">.</span><span class=\"n\">object_list</span>\n<span class=\"go\">[&#39;george&#39;, &#39;ringo&#39;]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page2</span><span class=\"o\">.</span><span class=\"n\">has_next</span><span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page2</span><span class=\"o\">.</span><span class=\"n\">has_previous</span><span class=\"p\">()</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page2</span><span class=\"o\">.</span><span class=\"n\">has_other_pages</span><span class=\"p\">()</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page2</span><span class=\"o\">.</span><span class=\"n\">next_page_number</span><span class=\"p\">()</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">EmptyPage</span>: <span class=\"n\">That page contains no results</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page2</span><span class=\"o\">.</span><span class=\"n\">previous_page_number</span><span class=\"p\">()</span>\n<span class=\"go\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page2</span><span class=\"o\">.</span><span class=\"n\">start_index</span><span class=\"p\">()</span> <span class=\"c1\"># The 1-based index of the first item on this page</span>\n<span class=\"go\">3</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">page2</span><span class=\"o\">.</span><span class=\"n\">end_index</span><span class=\"p\">()</span> <span class=\"c1\"># The 1-based index of the last item on this page</span>\n<span class=\"go\">4</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">EmptyPage</span>: <span class=\"n\">That page number is less than 1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">EmptyPage</span>: <span class=\"n\">That page contains no results</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Remarquez que vous pouvez donner à <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> une liste/tuple, un <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> Django ou tout autre objet possédant une méthode count()` ou <code class=\"docutils literal notranslate\"><span class=\"pre\">__len__()</span></code>. Pour déterminer le nombre d’objets contenus dans l’objet transmis, <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> essaie d’abord d’appeler <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> et se rabat sur <code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> si l’objet en question n’a pas de méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code>. Cela permet à des objets comme les <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> de Django 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</section>\n<section id=\"using-paginator-in-a-view\">\n<h2>Utilisation de <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> dans une vue<a class=\"heading-anchor\" href=\"#using-paginator-in-a-view\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Voici un exemple un peu plus complexe qui utilise <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> dans une vue pour paginer un résultat de requête. Nous présentons à la fois la vue et le gabarit correspondant pour vous montrer comment afficher les résultats. Cet exemple part du principe qu’il existe un modèle <code class=\"docutils literal notranslate\"><span class=\"pre\">Contacts</span></code> qui a déjà été importé.</p>\n<p>La fonction de vue ressemble à ceci :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.paginator</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Paginator</span><span class=\"p\">,</span> <span class=\"n\">EmptyPage</span><span class=\"p\">,</span> <span class=\"n\">PageNotAnInteger</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">listing</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">contact_list</span> <span class=\"o\">=</span> <span class=\"n\">Contacts</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"n\">paginator</span> <span class=\"o\">=</span> <span class=\"n\">Paginator</span><span class=\"p\">(</span><span class=\"n\">contact_list</span><span class=\"p\">,</span> <span class=\"mi\">25</span><span class=\"p\">)</span> <span class=\"c1\"># Show 25 contacts per page</span>\n\n    <span class=\"n\">page</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;page&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">contacts</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"n\">page</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">PageNotAnInteger</span><span class=\"p\">:</span>\n        <span class=\"c1\"># If page is not an integer, deliver first page.</span>\n        <span class=\"n\">contacts</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">EmptyPage</span><span class=\"p\">:</span>\n        <span class=\"c1\"># If page is out of range (e.g. 9999), deliver last page of results.</span>\n        <span class=\"n\">contacts</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">num_pages</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;list.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contacts&#39;</span><span class=\"p\">:</span> <span class=\"n\">contacts</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>Dans le gabarit <code class=\"file docutils literal notranslate\"><span class=\"pre\">list.html</span></code>, il est nécessaire d’inclure des éléments de navigation pour passer d’une page à l’autre, ainsi que des informations utiles sur les objets eux-mêmes :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">for</span> <span class=\"n\">contact</span> <span class=\"ow\">in</span> <span class=\"n\">contacts</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n    <span class=\"p\">{</span><span class=\"c1\"># Each &quot;contact&quot; is a Contact model object. #}</span>\n    <span class=\"p\">{{</span> <span class=\"n\">contact</span><span class=\"o\">.</span><span class=\"n\">full_name</span><span class=\"o\">|</span><span class=\"n\">upper</span> <span class=\"p\">}}</span><span class=\"o\">&lt;</span><span class=\"n\">br</span> <span class=\"o\">/&gt;</span>\n    <span class=\"o\">...</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endfor</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n\n<span class=\"o\">&lt;</span><span class=\"n\">div</span> <span class=\"n\">class</span><span class=\"o\">=</span><span class=\"s2\">&quot;pagination&quot;</span><span class=\"o\">&gt;</span>\n    <span class=\"o\">&lt;</span><span class=\"n\">span</span> <span class=\"n\">class</span><span class=\"o\">=</span><span class=\"s2\">&quot;step-links&quot;</span><span class=\"o\">&gt;</span>\n        <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> <span class=\"n\">contacts</span><span class=\"o\">.</span><span class=\"n\">has_previous</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n            <span class=\"o\">&lt;</span><span class=\"n\">a</span> <span class=\"n\">href</span><span class=\"o\">=</span><span class=\"s2\">&quot;?page={{ contacts.previous_page_number }}&quot;</span><span class=\"o\">&gt;</span><span class=\"n\">previous</span><span class=\"o\">&lt;/</span><span class=\"n\">a</span><span class=\"o\">&gt;</span>\n        <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endif</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n\n        <span class=\"o\">&lt;</span><span class=\"n\">span</span> <span class=\"n\">class</span><span class=\"o\">=</span><span class=\"s2\">&quot;current&quot;</span><span class=\"o\">&gt;</span>\n            <span class=\"n\">Page</span> <span class=\"p\">{{</span> <span class=\"n\">contacts</span><span class=\"o\">.</span><span class=\"n\">number</span> <span class=\"p\">}}</span> <span class=\"n\">of</span> <span class=\"p\">{{</span> <span class=\"n\">contacts</span><span class=\"o\">.</span><span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">num_pages</span> <span class=\"p\">}}</span><span class=\"o\">.</span>\n        <span class=\"o\">&lt;/</span><span class=\"n\">span</span><span class=\"o\">&gt;</span>\n\n        <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> <span class=\"n\">contacts</span><span class=\"o\">.</span><span class=\"n\">has_next</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n            <span class=\"o\">&lt;</span><span class=\"n\">a</span> <span class=\"n\">href</span><span class=\"o\">=</span><span class=\"s2\">&quot;?page={{ contacts.next_page_number }}&quot;</span><span class=\"o\">&gt;</span><span class=\"nb\">next</span><span class=\"o\">&lt;/</span><span class=\"n\">a</span><span class=\"o\">&gt;</span>\n        <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endif</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n    <span class=\"o\">&lt;/</span><span class=\"n\">span</span><span class=\"o\">&gt;</span>\n<span class=\"o\">&lt;/</span><span class=\"n\">div</span><span class=\"o\">&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"paginator-objects\">\n<h2>Objets <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code><a class=\"heading-anchor\" href=\"#paginator-objects\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Voici le constructeur de la classe <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> :</p>\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></dd></dl>\n\n<section id=\"required-arguments\">\n<h3>Paramètres obligatoires<a class=\"heading-anchor\" href=\"#required-arguments\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code></dt><dd><p>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/1.10/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/1.10/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>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">per_page</span></code></dt><dd><p>Le nombre maximum d’éléments à inclure dans une page, sans tenir compte des orphelins (voir le paramètre facultatif <code class=\"docutils literal notranslate\"><span class=\"pre\">orphans</span></code> ci-dessous).</p>\n</dd>\n</dl>\n</section>\n<section id=\"optional-arguments\">\n<h3>Paramètres facultatifs<a class=\"heading-anchor\" href=\"#optional-arguments\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">orphans</span></code></dt><dd><p>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>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">allow_empty_first_page</span></code></dt><dd><p>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>\n</dl>\n</section>\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.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 le numéro de page indiqué n’existe pas, une exception <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> est levée.</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.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> de Django 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<aside class=\"version-note version-changed\" data-version=\"1.9\">\n<p class=\"version-note-title\">Changed in Django 1.9</p><p>Dans les anciennes versions, <code class=\"docutils literal notranslate\"><span class=\"pre\">page_range</span></code> renvoyait une liste au lieu d’une itération.</p>\n</aside>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"invalidpage-exceptions\">\n<h2>Exceptions <code class=\"docutils literal notranslate\"><span class=\"pre\">InvalidPage</span></code><a class=\"heading-anchor\" href=\"#invalidpage-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. ce n’est 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>Levée lorsque <code class=\"docutils literal notranslate\"><span class=\"pre\">page()</span></code> 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>Levée lorsque <code class=\"docutils literal notranslate\"><span class=\"pre\">page()</span></code> 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 par une simple ligne <code class=\"docutils literal notranslate\"><span class=\"pre\">except</span> <span class=\"pre\">InvalidPage</span></code>.</p>\n</section>\n<section id=\"page-objects\">\n<h2>Objets <code class=\"docutils literal notranslate\"><span class=\"pre\">Page</span></code><a class=\"heading-anchor\" href=\"#page-objects\"><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 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 <em>ou</em> 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>","rootId":"module-django.core.paginator","toc":[{"title":"Exemple","anchor":"example","children":[]},{"title":"Utilisation de Paginator dans une vue","anchor":"using-paginator-in-a-view","children":[]},{"title":"Objets Paginator","anchor":"paginator-objects","children":[{"title":"Paramètres obligatoires","anchor":"required-arguments","children":[]},{"title":"Paramètres facultatifs","anchor":"optional-arguments","children":[]},{"title":"Méthodes","anchor":"methods","children":[]},{"title":"Attributs","anchor":"attributes","children":[]}]},{"title":"Exceptions InvalidPage","anchor":"invalidpage-exceptions","children":[]},{"title":"Objets Page","anchor":"page-objects","children":[{"title":"Méthodes","anchor":"id1","children":[]},{"title":"Attributs","anchor":"id2","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Utilisation de Django","url":"/fr/1.10/topics/"}],"prev":{"docname":"topics/logging","title":"Journalisation","url":"/fr/1.10/topics/logging/"},"next":{"docname":"topics/python3","title":"Passage à Python 3","url":"/fr/1.10/topics/python3/"},"formats":{"html":"/fr/1.10/topics/pagination/","markdown":"/fr/1.10/topics/pagination.md","json":"/fr/1.10/topics/pagination.json"},"source":"https://github.com/django/django/blob/stable/1.10.x/docs/topics/pagination.txt","official":"https://docs.djangoproject.com/fr/1.10/topics/pagination/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","es","el","pl"]}