{"title":"Stronicowanie","version":"3.1","locale":"pl","docname":"topics/pagination","url":"/pl/3.1/topics/pagination/","canonical":"https://djangodocs.dev/pl/3.1/topics/pagination/","summary":"Django provides high-level and low-level ways to help you manage paginated data – that is, data that’s split across several pages, with „Previous/Next” links. The…","html":"<h1>Stronicowanie<a class=\"heading-anchor\" href=\"#pagination\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django provides high-level and low-level ways to help you manage paginated data\n– that is, data that’s split across several pages, with „Previous/Next” links.</p>\n<section id=\"the-paginator-class\">\n<h2>The <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> class<a class=\"heading-anchor\" href=\"#the-paginator-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Under the hood, all methods of pagination use the\n<a class=\"reference internal\" href=\"/pl/3.1/ref/paginator/#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. It does all the heavy lifting\nof actually splitting a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> into <a class=\"reference internal\" href=\"/pl/3.1/ref/paginator/#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>\nobjects.</p>\n</section>\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=\"/pl/3.1/ref/paginator/#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\nnumber of items you’d like to have on each page, and it gives you methods for\naccessing the items for each page:</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=\"paginating-a-listview\">\n<h2>Paginating a <code class=\"docutils literal notranslate\"><span class=\"pre\">ListView</span></code><a class=\"heading-anchor\" href=\"#paginating-a-listview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/pl/3.1/ref/class-based-views/generic-display/#django.views.generic.list.ListView\" title=\"django.views.generic.list.ListView\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.views.generic.list.ListView</span></code></a> provides a builtin way to paginate\nthe displayed list. You can do this by adding a\n<a class=\"reference internal\" href=\"/pl/3.1/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin.paginate_by\" title=\"django.views.generic.list.MultipleObjectMixin.paginate_by\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">paginate_by</span></code></a> attribute to\nyour view class, for example:</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.views.generic</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ListView</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Contact</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ContactList</span><span class=\"p\">(</span><span class=\"n\">ListView</span><span class=\"p\">):</span>\n    <span class=\"n\">paginate_by</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Contact</span>\n</code></pre></div>\n<p>This limits the number of objects per page and adds a <code class=\"docutils literal notranslate\"><span class=\"pre\">paginator</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">page_obj</span></code> to the <code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code>. To allow your users to navigate between pages,\nadd links to the next and previous page, in your template like this:</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\">page_obj</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\">page_obj.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\">page_obj.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\">page_obj.number</span> <span class=\"cp\">}}</span> of <span class=\"cp\">{{</span> <span class=\"nv\">page_obj.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\">page_obj.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\">page_obj.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\">page_obj.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=\"using-paginator-in-a-view-function\">\n<span id=\"using-paginator-in-view\"></span><h2>Using <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> in a view function<a class=\"heading-anchor\" href=\"#using-paginator-in-a-view-function\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Here’s an example using <a class=\"reference internal\" href=\"/pl/3.1/ref/paginator/#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\nfunction to paginate a queryset:</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Contact</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\">Contact</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_number</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\">page_obj</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_number</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;page_obj&#39;</span><span class=\"p\">:</span> <span class=\"n\">page_obj</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 can include navigation between pages in\nthe same way as in the template for the <code class=\"docutils literal notranslate\"><span class=\"pre\">ListView</span></code> above.</p>\n</section>","rootId":"pagination","toc":[{"title":"The Paginator class","anchor":"the-paginator-class","children":[]},{"title":"Example","anchor":"example","children":[]},{"title":"Paginating a ListView","anchor":"paginating-a-listview","children":[]},{"title":"Using Paginator in a view function","anchor":"using-paginator-in-a-view-function","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Używanie Django","url":"/pl/3.1/topics/"}],"prev":{"docname":"topics/logging","title":"Logging","url":"/pl/3.1/topics/logging/"},"next":{"docname":"topics/security","title":"Security in Django","url":"/pl/3.1/topics/security/"},"formats":{"html":"/pl/3.1/topics/pagination/","markdown":"/pl/3.1/topics/pagination.md","json":"/pl/3.1/topics/pagination.json"},"source":"https://github.com/django/django/blob/stable/3.1.x/docs/topics/pagination.txt","official":"https://docs.djangoproject.com/pl/3.1/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"]}