{"title":"Pagination","version":"1.9","locale":"fr","docname":"topics/pagination","url":"/fr/1.9/topics/pagination/","canonical":"https://djangodocs.dev/fr/1.9/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…","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\">django/core/paginator.py</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\">Paginator</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=\"nn\">django.core.paginator</span> <span class=\"kn\">import</span> Paginator\n<span class=\"gp\">&gt;&gt;&gt; </span>objects <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>p <span class=\"o\">=</span> Paginator<span class=\"p\">(</span>objects<span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>count\n<span class=\"go\">4</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>num_pages\n<span class=\"go\">2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">type</span><span class=\"p\">(</span>p<span class=\"o\">.</span>page_range<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>p<span class=\"o\">.</span>page_range\n<span class=\"go\">range(1, 3)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>page1 <span class=\"o\">=</span> p<span class=\"o\">.</span>page<span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>page1\n<span class=\"go\">&lt;Page 1 of 2&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>page1<span class=\"o\">.</span>object_list\n<span class=\"go\">[&#39;john&#39;, &#39;paul&#39;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>page2 <span class=\"o\">=</span> p<span class=\"o\">.</span>page<span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>page2<span class=\"o\">.</span>object_list\n<span class=\"go\">[&#39;george&#39;, &#39;ringo&#39;]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>page2<span class=\"o\">.</span>has_next<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>page2<span class=\"o\">.</span>has_previous<span class=\"p\">()</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>page2<span class=\"o\">.</span>has_other_pages<span class=\"p\">()</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>page2<span class=\"o\">.</span>next_page_number<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>: That page contains no results\n<span class=\"gp\">&gt;&gt;&gt; </span>page2<span class=\"o\">.</span>previous_page_number<span class=\"p\">()</span>\n<span class=\"go\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>page2<span class=\"o\">.</span>start_index<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>page2<span class=\"o\">.</span>end_index<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>p<span class=\"o\">.</span>page<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>: That page number is less than 1\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>page<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>: That page contains no results\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\">Paginator</code> une liste/tuple, un <code class=\"docutils literal notranslate\">QuerySet</code> Django ou tout autre objet possédant une méthode count()` ou <code class=\"docutils literal notranslate\">__len__()</code>. Pour déterminer le nombre d’objets contenus dans l’objet transmis, <code class=\"docutils literal notranslate\">Paginator</code> essaie d’abord d’appeler <code class=\"docutils literal notranslate\">count()</code> et se rabat sur <code class=\"docutils literal notranslate\">len()</code> si l’objet en question n’a pas de méthode <code class=\"docutils literal notranslate\">count()</code>. Cela permet à des objets comme les <code class=\"docutils literal notranslate\">QuerySet</code> de Django d’utiliser une méthode <code class=\"docutils literal notranslate\">count()</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\">Paginator</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\">Paginator</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\">Contacts</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=\"nn\">django.core.paginator</span> <span class=\"kn\">import</span> Paginator<span class=\"p\">,</span> EmptyPage<span class=\"p\">,</span> PageNotAnInteger\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> render\n\n<span class=\"k\">def</span> <span class=\"nf\">listing</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    contact_list <span class=\"o\">=</span> Contacts<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n    paginator <span class=\"o\">=</span> Paginator<span class=\"p\">(</span>contact_list<span class=\"p\">,</span> <span class=\"mi\">25</span><span class=\"p\">)</span> <span class=\"c1\"># Show 25 contacts per page</span>\n\n    page <span class=\"o\">=</span> request<span class=\"o\">.</span>GET<span class=\"o\">.</span>get<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        contacts <span class=\"o\">=</span> paginator<span class=\"o\">.</span>page<span class=\"p\">(</span>page<span class=\"p\">)</span>\n    <span class=\"k\">except</span> PageNotAnInteger<span class=\"p\">:</span>\n        <span class=\"c1\"># If page is not an integer, deliver first page.</span>\n        contacts <span class=\"o\">=</span> paginator<span class=\"o\">.</span>page<span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> EmptyPage<span class=\"p\">:</span>\n        <span class=\"c1\"># If page is out of range (e.g. 9999), deliver last page of results.</span>\n        contacts <span class=\"o\">=</span> paginator<span class=\"o\">.</span>page<span class=\"p\">(</span>paginator<span class=\"o\">.</span>num_pages<span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> render<span class=\"p\">(</span>request<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> contacts<span class=\"p\">})</span>\n</code></pre></div>\n<p>Dans le gabarit <code class=\"file docutils literal notranslate\">list.html</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> contact <span class=\"ow\">in</span> contacts <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> contact<span class=\"o\">.</span>full_name<span class=\"o\">|</span>upper <span class=\"p\">}}</span><span class=\"o\">&lt;</span>br <span class=\"o\">/&gt;</span>\n    <span class=\"o\">...</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> endfor <span class=\"o\">%</span><span class=\"p\">}</span>\n\n<span class=\"o\">&lt;</span>div class<span class=\"o\">=</span><span class=\"s2\">&quot;pagination&quot;</span><span class=\"o\">&gt;</span>\n    <span class=\"o\">&lt;</span>span class<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> contacts<span class=\"o\">.</span>has_previous <span class=\"o\">%</span><span class=\"p\">}</span>\n            <span class=\"o\">&lt;</span>a href<span class=\"o\">=</span><span class=\"s2\">&quot;?page={{ contacts.previous_page_number }}&quot;</span><span class=\"o\">&gt;</span>previous<span class=\"o\">&lt;/</span>a<span class=\"o\">&gt;</span>\n        <span class=\"p\">{</span><span class=\"o\">%</span> endif <span class=\"o\">%</span><span class=\"p\">}</span>\n\n        <span class=\"o\">&lt;</span>span class<span class=\"o\">=</span><span class=\"s2\">&quot;current&quot;</span><span class=\"o\">&gt;</span>\n            Page <span class=\"p\">{{</span> contacts<span class=\"o\">.</span>number <span class=\"p\">}}</span> of <span class=\"p\">{{</span> contacts<span class=\"o\">.</span>paginator<span class=\"o\">.</span>num_pages <span class=\"p\">}}</span><span class=\"o\">.</span>\n        <span class=\"o\">&lt;/</span>span<span class=\"o\">&gt;</span>\n\n        <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> contacts<span class=\"o\">.</span>has_next <span class=\"o\">%</span><span class=\"p\">}</span>\n            <span class=\"o\">&lt;</span>a href<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>a<span class=\"o\">&gt;</span>\n        <span class=\"p\">{</span><span class=\"o\">%</span> endif <span class=\"o\">%</span><span class=\"p\">}</span>\n    <span class=\"o\">&lt;/</span>span<span class=\"o\">&gt;</span>\n<span class=\"o\">&lt;/</span>div<span class=\"o\">&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"paginator-objects\">\n<h2>Objets <code class=\"docutils literal notranslate\">Paginator</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\">Paginator</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\">class</span> </em><span class=\"sig-name descname\">Paginator</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">object_list</em>, <em class=\"sig-param\">per_page</em>, <em class=\"sig-param\">orphans<span class=\"o\">=</span><span class=\"default_value\">0</span></em>, <em class=\"sig-param\">allow_empty_first_page<span class=\"o\">=</span><span class=\"default_value\">True</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\">object_list</code></dt><dd><p>A list, tuple, <code class=\"docutils literal notranslate\">QuerySet</code>, or other sliceable object with a <code class=\"docutils literal notranslate\">count()</code>\nor <code class=\"docutils literal notranslate\">__len__()</code> method. For consistent pagination, <code class=\"docutils literal notranslate\">QuerySet</code>s should\nbe ordered, e.g. with an <a class=\"reference internal\" href=\"/fr/1.9/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\">order_by()</code></a>\nclause or with a default <a class=\"reference internal\" href=\"/fr/1.9/ref/models/options/#django.db.models.Options.ordering\" title=\"django.db.models.Options.ordering\"><code class=\"xref py py-attr docutils literal notranslate\">ordering</code></a> on the\nmodel.</p>\n<aside class=\"admonition-performance-issues-paginating-large-queryset-s admonition\" role=\"note\">\n<p class=\"admonition-title\">Performance issues paginating large <code class=\"docutils literal notranslate\">QuerySet</code>s</p>\n<p>If you’re using a <code class=\"docutils literal notranslate\">QuerySet</code> with a very large number of items,\nrequesting high page numbers might be slow on some databases, because\nthe resulting <code class=\"docutils literal notranslate\">LIMIT</code>/<code class=\"docutils literal notranslate\">OFFSET</code> query needs to count the number of\n<code class=\"docutils literal notranslate\">OFFSET</code> records which takes longer as the page number gets higher.</p>\n</aside>\n</dd>\n<dt><code class=\"docutils literal notranslate\">per_page</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\">orphans</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\">orphans</code></dt><dd><p>Le nombre minimum d’éléments autorisés sur la dernière page, la valeur par défaut étant zéro. 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\">orphans</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\">per_page=10</code>  et <code class=\"docutils literal notranslate\">orphans=3</code>, il y aura deux pages ; la première avec 10 éléments et la seconde (et dernière) avec 13 éléments.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">allow_empty_first_page</code></dt><dd><p>Indique si la première page peut être vide. Avec la valeur <code class=\"docutils literal notranslate\">False</code> et une liste <code class=\"docutils literal notranslate\">object_list</code> vide, une erreur <code class=\"docutils literal notranslate\">EmptyPage</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\">Paginator.</span><span class=\"sig-name descname\">page</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">number</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\">Page</code></a> correspondant à l’index <code class=\"docutils literal notranslate\">number</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\">InvalidPage</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\">Paginator.</span><span class=\"sig-name descname\">count</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\">object_list</code>, <code class=\"docutils literal notranslate\">Paginator</code> essaie d’abord d’appeler <code class=\"docutils literal notranslate\">object_list.count()</code>. Si <code class=\"docutils literal notranslate\">object_list</code> n’a pas de méthode <code class=\"docutils literal notranslate\">count()</code>, <code class=\"docutils literal notranslate\">Paginator</code> se rabat sur <code class=\"docutils literal notranslate\">len(object_list)</code>. Cela permet à des objets comme les <code class=\"docutils literal notranslate\">QuerySet</code> de Django d’utiliser une méthode <code class=\"docutils literal notranslate\">count()</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\">Paginator.</span><span class=\"sig-name descname\">num_pages</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\">Paginator.</span><span class=\"sig-name descname\">page_range</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\">[1, 2, 3, 4]</code>.</p>\n<aside class=\"version-note version-changed\" data-version=\"1.9\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 1.9</p><p>Dans les anciennes versions, <code class=\"docutils literal notranslate\">page_range</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\">InvalidPage</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\">exception</span> </em><span class=\"sig-name descname\">InvalidPage</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\">Paginator.page()</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\">InvalidPage</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\">exception</span> </em><span class=\"sig-name descname\">PageNotAnInteger</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\">page()</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\">exception</span> </em><span class=\"sig-name descname\">EmptyPage</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\">page()</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\">InvalidPage</code></a>, il est donc possible de les intercepter par une simple ligne <code class=\"docutils literal notranslate\">except InvalidPage</code>.</p>\n</section>\n<section id=\"page-objects\">\n<h2>Objets <code class=\"docutils literal notranslate\">Page</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\">Page</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\">Paginator.page()</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\">class</span> </em><span class=\"sig-name descname\">Page</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">object_list</em>, <em class=\"sig-param\">number</em>, <em class=\"sig-param\">paginator</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\">Page.object_list</code></a> lorsqu’on lui applique <code class=\"docutils literal notranslate\">len()</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\">Page.</span><span class=\"sig-name descname\">has_next</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\">True</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\">Page.</span><span class=\"sig-name descname\">has_previous</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\">True</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\">Page.</span><span class=\"sig-name descname\">has_other_pages</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\">True</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\">Page.</span><span class=\"sig-name descname\">next_page_number</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\">InvalidPage</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\">Page.</span><span class=\"sig-name descname\">previous_page_number</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\">InvalidPage</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\">Page.</span><span class=\"sig-name descname\">start_index</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\">start_index()</code></a> de la deuxième page renverrait <code class=\"docutils literal notranslate\">3</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\">Page.</span><span class=\"sig-name descname\">end_index</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\">end_index()</code></a> de la deuxième page renverrait <code class=\"docutils literal notranslate\">4</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\">Page.</span><span class=\"sig-name descname\">object_list</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\">Page.</span><span class=\"sig-name descname\">number</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\">Page.</span><span class=\"sig-name descname\">paginator</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\">Paginator</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.9/topics/"}],"prev":{"docname":"topics/logging","title":"Journalisation","url":"/fr/1.9/topics/logging/"},"next":{"docname":"topics/python3","title":"Passage à Python 3","url":"/fr/1.9/topics/python3/"},"formats":{"html":"/fr/1.9/topics/pagination/","markdown":"/fr/1.9/topics/pagination.md","json":"/fr/1.9/topics/pagination.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/topics/pagination.txt","official":"https://docs.djangoproject.com/fr/1.9/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"]}