{"title":"Stronicowanie","version":"2.2","locale":"pl","docname":"topics/pagination","url":"/pl/2.2/topics/pagination/","canonical":"https://djangodocs.dev/pl/2.2/topics/pagination/","summary":"Django provides a few classes that help you manage paginated data – that is, data that’s split across several pages, with „Previous/Next” links. These classes live…","html":"<span id=\"pagination\"></span><h1>Stronicowanie<a class=\"heading-anchor\" href=\"#module-django.core.paginator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django provides a few classes that help you manage paginated data – that is,\ndata that’s split across several pages, with „Previous/Next” links. These\nclasses live in <code class=\"file docutils literal notranslate\"><span class=\"pre\">django/core/paginator.py</span></code>.</p>\n<section id=\"example\">\n<h2>Example<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Give <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> a list of objects, plus the number of items you’d like to\nhave on each page, and it gives you methods for accessing the items for each\npage:</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>\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\">Informacja</p>\n<p>Note that you can give <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> a list/tuple, a Django <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>,\nor any other object with a <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">__len__()</span></code> method. When\ndetermining the number of objects contained in the passed object,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> will first try calling <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code>, then fallback to using\n<code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> if the passed object has no <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> method. This allows\nobjects such as Django’s <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> to use a more efficient <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code>\nmethod when available.</p>\n</aside>\n</section>\n<section id=\"using-paginator-in-a-view\">\n<span id=\"using-paginator-in-view\"></span><h2>Using <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> in a view<a class=\"heading-anchor\" href=\"#using-paginator-in-a-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Here’s a slightly more complex example using <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> in a view to\npaginate a queryset. We give both the view and the accompanying template to\nshow how you can display the results. This example assumes you have a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Contacts</span></code> model that has already been imported.</p>\n<p>The view function looks like this:</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>\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=\"n\">contacts</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">get_page</span><span class=\"p\">(</span><span class=\"n\">page</span><span class=\"p\">)</span>\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>In the template <code class=\"file docutils literal notranslate\"><span class=\"pre\">list.html</span></code>, you’ll want to include navigation between\npages along with any interesting information from the objects themselves:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">contact</span> <span class=\"k\">in</span> <span class=\"nv\">contacts</span> <span class=\"cp\">%}</span>\n    <span class=\"c\">{# Each &quot;contact&quot; is a Contact model object. #}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">contact.full_name</span><span class=\"o\">|</span><span class=\"nf\">upper</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;</span><span class=\"nt\">br</span><span class=\"p\">&gt;</span>\n    ...\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;pagination&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">span</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;step-links&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">contacts.has_previous</span> <span class=\"cp\">%}</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;?page=1&quot;</span><span class=\"p\">&gt;</span><span class=\"ni\">&amp;laquo;</span> first<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;?page=</span><span class=\"cp\">{{</span> <span class=\"nv\">contacts.previous_page_number</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>previous<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n\n        <span class=\"p\">&lt;</span><span class=\"nt\">span</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;current&quot;</span><span class=\"p\">&gt;</span>\n            Page <span class=\"cp\">{{</span> <span class=\"nv\">contacts.number</span> <span class=\"cp\">}}</span> of <span class=\"cp\">{{</span> <span class=\"nv\">contacts.paginator.num_pages</span> <span class=\"cp\">}}</span>.\n        <span class=\"p\">&lt;/</span><span class=\"nt\">span</span><span class=\"p\">&gt;</span>\n\n        <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">contacts.has_next</span> <span class=\"cp\">%}</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;?page=</span><span class=\"cp\">{{</span> <span class=\"nv\">contacts.next_page_number</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>next<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;?page=</span><span class=\"cp\">{{</span> <span class=\"nv\">contacts.paginator.num_pages</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>last <span class=\"ni\">&amp;raquo;</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">span</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"paginator-objects\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> objects<a class=\"heading-anchor\" href=\"#paginator-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The <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> class has this constructor:</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<section id=\"required-arguments\">\n<h3>Required arguments<a class=\"heading-anchor\" href=\"#required-arguments\"><span class=\"visually-hidden\">Link to this heading</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>A list, tuple, <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>, or other sliceable object with a <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code>\nor <code class=\"docutils literal notranslate\"><span class=\"pre\">__len__()</span></code> method. For consistent pagination, <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>s should\nbe ordered, e.g. with an <a class=\"reference internal\" href=\"/pl/2.2/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>\nclause or with a default <a class=\"reference internal\" href=\"/pl/2.2/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> on the\nmodel.</p>\n<aside class=\"admonition-performance-issues-paginating-large-queryset-s admonition\">\n<p class=\"admonition-title\">Performance issues paginating large <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>s</p>\n<p>If you’re using a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></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\"><span class=\"pre\">LIMIT</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">OFFSET</span></code> query needs to count the number of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">OFFSET</span></code> records which takes longer as the page number gets higher.</p>\n</aside>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">per_page</span></code></dt><dd><p>The maximum number of items to include on a page, not including orphans\n(see the <code class=\"docutils literal notranslate\"><span class=\"pre\">orphans</span></code> optional argument below).</p>\n</dd>\n</dl>\n</section>\n<section id=\"optional-arguments\">\n<h3>Optional arguments<a class=\"heading-anchor\" href=\"#optional-arguments\"><span class=\"visually-hidden\">Link to this heading</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>Use this when you don’t want to have a last page with very few items.\nIf the last page would normally have a number of items less than or equal\nto <code class=\"docutils literal notranslate\"><span class=\"pre\">orphans</span></code>, then those items will be added to the previous page (which\nbecomes the last page) instead of leaving the items on a page by\nthemselves. For example, with 23 items, <code class=\"docutils literal notranslate\"><span class=\"pre\">per_page=10</span></code>, and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">orphans=3</span></code>, there will be two pages; the first page with 10 items and\nthe second (and last) page with 13 items. <code class=\"docutils literal notranslate\"><span class=\"pre\">orphans</span></code> defaults to zero,\nwhich means pages are never combined and the last page may have one item.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">allow_empty_first_page</span></code></dt><dd><p>Whether or not the first page is allowed to be empty.  If <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code> is  empty, then an <code class=\"docutils literal notranslate\"><span class=\"pre\">EmptyPage</span></code> error will be raised.</p>\n</dd>\n</dl>\n</section>\n<section id=\"methods\">\n<h3>Metody<a class=\"heading-anchor\" href=\"#methods\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns a <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> object with the given 1-based index, while also\nhandling out of range and invalid page numbers.</p>\n<p>If the page isn’t a number, it returns the first page. If the page number\nis negative or greater than the number of pages, it returns the last page.</p>\n<p>It raises an 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>) only if you specify\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator(...,</span> <span class=\"pre\">allow_empty_first_page=False)</span></code> and the <code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code> is\nempty.</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns a <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> object with the given 1-based index. Raises\n<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> if the given page number doesn’t exist.</p>\n</dd></dl>\n\n</section>\n<section id=\"attributes\">\n<h3>Atrybuty<a class=\"heading-anchor\" href=\"#attributes\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Całkowita liczba obiektów na wszystkich stronach.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Informacja</p>\n<p>When determining the number of objects contained in <code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> will first try calling <code class=\"docutils literal notranslate\"><span class=\"pre\">object_list.count()</span></code>. If\n<code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code> has no <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> method, then <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> will\nfallback to using <code class=\"docutils literal notranslate\"><span class=\"pre\">len(object_list)</span></code>. This allows objects, such as\nDjango’s <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>, to use a more efficient <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> method when\navailable.</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Całkowita liczba stron</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A 1-based range iterator of page numbers, e.g. yielding <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=\"invalidpage-exceptions\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">InvalidPage</span></code> exceptions<a class=\"heading-anchor\" href=\"#invalidpage-exceptions\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A base class for exceptions raised when a paginator is passed an invalid\npage number.</p>\n</dd></dl>\n\n<p>The <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> method raises an exception if the requested page is\ninvalid (i.e., not an integer) or contains no objects. Generally, it’s enough\nto catch the <code class=\"docutils literal notranslate\"><span class=\"pre\">InvalidPage</span></code> exception, but if you’d like more granularity,\nyou can catch either of the following exceptions:</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Raised when <code class=\"docutils literal notranslate\"><span class=\"pre\">page()</span></code> is given a value that isn’t an integer.</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Raised when <code class=\"docutils literal notranslate\"><span class=\"pre\">page()</span></code> is given a valid value but no objects exist on that\npage.</p>\n</dd></dl>\n\n<p>Both of the exceptions are subclasses of <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>, so you can handle\nthem both with a simple <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><code class=\"docutils literal notranslate\"><span class=\"pre\">Page</span></code> objects<a class=\"heading-anchor\" href=\"#page-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>You usually won’t construct <code class=\"docutils literal notranslate\"><span class=\"pre\">Page</span></code> objects by hand – you’ll get them\nusing <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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A page acts like a sequence of <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> when using\n<code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> or iterating it directly.</p>\n</dd></dl>\n\n<section id=\"id1\">\n<h3>Metody<a class=\"heading-anchor\" href=\"#id1\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if there’s a next page.</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if there’s a previous page.</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if there’s a next <em>or</em> previous page.</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the next page number. Raises <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> if next page\ndoesn’t exist.</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the previous page number. Raises <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> if previous\npage doesn’t exist.</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the 1-based index of the first object on the page, relative to all\nof the objects in the paginator’s list. For example, when paginating a list\nof 5 objects with 2 objects per page, the second page’s\n<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> would return <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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the 1-based index of the last object on the page, relative to all\nof the objects in the paginator’s list. For example, when paginating a list\nof 5 objects with 2 objects per page, the second page’s\n<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> would return <code class=\"docutils literal notranslate\"><span class=\"pre\">4</span></code>.</p>\n</dd></dl>\n\n</section>\n<section id=\"id2\">\n<h3>Atrybuty<a class=\"heading-anchor\" href=\"#id2\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The list of objects on this 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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The 1-based page number for this 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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The associated <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> object.</p>\n</dd></dl>\n\n</section>\n</section>","rootId":"module-django.core.paginator","toc":[{"title":"Example","anchor":"example","children":[]},{"title":"Using Paginator in a view","anchor":"using-paginator-in-a-view","children":[]},{"title":"Paginator objects","anchor":"paginator-objects","children":[{"title":"Required arguments","anchor":"required-arguments","children":[]},{"title":"Optional arguments","anchor":"optional-arguments","children":[]},{"title":"Metody","anchor":"methods","children":[]},{"title":"Atrybuty","anchor":"attributes","children":[]}]},{"title":"InvalidPage exceptions","anchor":"invalidpage-exceptions","children":[]},{"title":"Page objects","anchor":"page-objects","children":[{"title":"Metody","anchor":"id1","children":[]},{"title":"Atrybuty","anchor":"id2","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Używanie Django","url":"/pl/2.2/topics/"}],"prev":{"docname":"topics/logging","title":"Logging","url":"/pl/2.2/topics/logging/"},"next":{"docname":"topics/security","title":"Security in Django","url":"/pl/2.2/topics/security/"},"formats":{"html":"/pl/2.2/topics/pagination/","markdown":"/pl/2.2/topics/pagination.md","json":"/pl/2.2/topics/pagination.json"},"source":"https://github.com/django/django/blob/stable/2.2.x/docs/topics/pagination.txt","official":"https://docs.djangoproject.com/pl/2.2/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"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}