{"title":"ページネーション","version":"2.1","locale":"ja","docname":"topics/pagination","url":"/ja/2.1/topics/pagination/","canonical":"https://djangodocs.dev/ja/2.1/topics/pagination/","summary":"Django はページネーションしたデータの管理を助けるクラスを提供しています。つまり、データをいくつかのページに分割して、「戻る/次へ」リンクを使って移動できるようにします。これらのクラスは django/core/paginator.py で実装されています。 カスタマイズ例 Link to this heading #…","html":"<span id=\"pagination\"></span><h1>ページネーション<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 はページネーションしたデータの管理を助けるクラスを提供しています。つまり、データをいくつかのページに分割して、「戻る/次へ」リンクを使って移動できるようにします。これらのクラスは <code class=\"file docutils literal notranslate\"><span class=\"pre\">django/core/paginator.py</span></code> で実装されています。</p>\n<section id=\"example\">\n<h2>カスタマイズ例<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"#django.core.paginator.Paginator\" title=\"django.core.paginator.Paginator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Paginator</span></code></a> にオブジェクトのリストと、各ページに持たせたいアイテムの数を与えてください。すると、各ページのアイテムにアクセスできるメソッドが使えるようになります。</p>\n<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\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> には、リストやタプル、 Django の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">__len__()</span></code> メソッドを持つどんなオブジェクトでも与えることができます。渡されたオブジェクトに含まれるオブジェクト数を特定するとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> は最初に <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> メソッドの実行を試み、その後、渡されたオブジェクトが <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> メソッドを実装していなかった場合のフォールバックとして <code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> を使用します。この工夫により、Djangoの <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> などで、より効率のよい <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> メソッドを利用できます。</p>\n</aside>\n</section>\n<section id=\"using-paginator-in-a-view\">\n<span id=\"using-paginator-in-view\"></span><h2><code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> をビューで使用する<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>次は、ビューの中で queryset をページネーションするために <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> を使用する、もう少し複雑な例を見てみましょう。ページネーションの結果を表示する方法を見せるために、ビューとテンプレートの両方を示します。この例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">Contacts</span></code> モデルはあらかじめインポートされているものとします。</p>\n<p>ビュー関数は次のようになります。</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> オブジェクト<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><a class=\"reference internal\" href=\"#django.core.paginator.Paginator\" title=\"django.core.paginator.Paginator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Paginator</span></code></a> には次のようなコンストラクタがあります。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.paginator.Paginator\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Paginator</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">object_list</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">per_page</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">orphans</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">0</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">allow_empty_first_page</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.paginator.Paginator\"><span class=\"visually-hidden\">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>リスト、タプル、<code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>、あるいはその他のスライス可能なオブジェクトで、<code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">__len__()</span></code> を実装しているオブジェクトを指定します。一貫性のあるページネーションのためには、<code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> は並び替えられていなければなりません。たとえば、<a class=\"reference internal\" href=\"/ja/2.1/ref/models/querysets/#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a> 句を使用したり、モデルでデフォルトの <a class=\"reference internal\" href=\"/ja/2.1/ref/models/options/#django.db.models.Options.ordering\" title=\"django.db.models.Options.ordering\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">ordering</span></code></a> を指定します。</p>\n<aside class=\"admonition-performance-issues-paginating-large-queryset-s admonition\">\n<p class=\"admonition-title\">巨大な <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> のページネーションによるパフォーマンス上の問題</p>\n<p>非常に多数のアイテムを持つ <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を使用した場合、数の大きいページをリクエストした時位に、データベースによっては速度が低下する場合があります。これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">OFFSET</span></code> 数を数えるために必要な <code class=\"docutils literal notranslate\"><span class=\"pre\">LIMIT</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">OFFSET</span></code> クエリの処理時間が、ページ数が増えるにつれて長くなってしまうためです。</p>\n</aside>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">per_page</span></code></dt><dd><p>1ページごとに含まれる最大のアイテム数です。これには孤立したアイテム (orphan) は含まれません (詳しくは以下の <code class=\"docutils literal notranslate\"><span class=\"pre\">orphans</span></code> オプション引数をご覧ください)。</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>最後のページに少数のアイテムだけが表示されるのを防ぎたい時に使用します。もし最後のページに <code class=\"docutils literal notranslate\"><span class=\"pre\">orphans</span></code> で指定した数以下のアイテムしか含まれない場合、最終ページではなく、1つ前のページにそれらのアイテムが追加されます (そのページが最終ページになります)。たとえば、23個のアイテムがあり、<code class=\"docutils literal notranslate\"><span class=\"pre\">per_page=10</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">orphans=3</span></code> をしていしたとします。その場合、ページ数は2になり、最初のページには10個のアイテムが、2つ目の (最後の) ページには13個のアイテムが表示されることになります。<code class=\"docutils literal notranslate\"><span class=\"pre\">orphans</span></code> はデフォルトで0になっているため、ページが合体することはなく、最後のページには1アイテムだけが表示されるかもしれません。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">allow_empty_first_page</span></code></dt><dd><p>最初のページがからであることを許すかどうかを指定します。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を指定し、<code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code> が空だった場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">EmptyPage</span></code> エラーが起こります。</p>\n</dd>\n</dl>\n</section>\n<section id=\"methods\">\n<h3>メソッド<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><aside class=\"version-note version-added\" data-version=\"2.0\">\n<p class=\"version-note-title\">New in Django 2.0</p></aside>\n<p>1から始まるインデックスをもつ <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> オブジェクトを返します。このオブジェクトは、範囲外のページ数や無効なページ数もハンドリングします。</p>\n<p>与えられた値が数字でなかった場合は、最初のページを返します。ページ数が負の数や全体のページ数より大きかった場合は、最後のページを返します。</p>\n<p>例外 (<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>) が発生するのは、<code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator(...,</span> <span class=\"pre\">allow_empty_first_page=False)</span></code> を指定して``object_list`` が空であるとき、かつそのときに限ります。</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>1から始まるインデックスをもつ <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> オブジェクトを返します。与えられたページ数が存在しない場合、<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> 例外を起こします。</p>\n</dd></dl>\n\n</section>\n<section id=\"attributes\">\n<h3>属性<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>すべてのページに渡るオブジェクト全体の数です。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code> に含まれるオブジェクトの数を求めるため、<code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> は初めに <code class=\"docutils literal notranslate\"><span class=\"pre\">object_list.count()</span></code> を呼びます。<code class=\"docutils literal notranslate\"><span class=\"pre\">object_list</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> メソッドを持たなかった場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> は フォールバックして <code class=\"docutils literal notranslate\"><span class=\"pre\">len(object_list)</span></code> を使用します。これにより、Django の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> などで、より効率のよい <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> メソッドが利用できます。</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>トータルのページ数</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>1から始まるページ数の範囲のイテレータです。たとえば、<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> 例外<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>pagenator に無効なページ数が渡された時に発生する例外のベースクラスです。</p>\n</dd></dl>\n\n<p>リクエストされたページが無効な値だったり (たとえば、整数でなかったなど)、オブジェクトが1つも含まれていなかった場合、<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> メソッドは例外を起こします。一般には、<code class=\"docutils literal notranslate\"><span class=\"pre\">InvalidPage</span></code> 例外を捕捉すれば十分ですが、粒度を細かくしたい場合は、以下の例外のいずれかを捕捉することもできます。</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>整数以外の値が <code class=\"docutils literal notranslate\"><span class=\"pre\">page()</span></code> に与えられた時に発生します。</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><code class=\"docutils literal notranslate\"><span class=\"pre\">page()</span></code> には有効な値が与えられたが、そのページにオブジェクトが1つも存在しなかった時に発生します。</p>\n</dd></dl>\n\n<p>2つの例外は <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> のサブクラスであるため、両方とも単に <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> オブジェクト<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>通常は <code class=\"docutils literal notranslate\"><span class=\"pre\">Page</span></code> オブジェクトを手動で作ることはありません。<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>1つのページは、<code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> を使ったり直接イテレーションした時、<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> のシーケンスのように振る舞います。</p>\n</dd></dl>\n\n<section id=\"id1\">\n<h3>メソッド<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>次のページが存在する時、<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返します。</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>前のページが存在する時、<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返します。</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>次のページ <em>または</em> 前のページがが存在する時、<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返します。</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>次のページ数を返します。次のページが存在しないときは <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> 例外を起こします。</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>前のページ数を返します。前のページが存在しないときは <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> 例外を起こします。</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>ページ上の最初のオブジェクトに対する、1から始まるインデックスを返します。これは、ページネータのリストに含まれる全オブジェクトに対するインデックスです。たとえば、5個のオブジェクトのリストを各ページ2オブジェクトでページネーションしている場合、2ページ目の <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> は <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>ページ上の最後のオブジェクトに対する、1から始まるインデックスを返します。これは、ページネータのリストに含まれる全オブジェクトに対するインデックスです。たとえば、5個のオブジェクトのリストを各ページ2オブジェクトでページネーションしている場合、2ページ目の <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> は <code class=\"docutils literal notranslate\"><span class=\"pre\">4</span></code> を返すでしょう。</p>\n</dd></dl>\n\n</section>\n<section id=\"id2\">\n<h3>属性<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>当該のページに含まれるオブジェクトのリストです。</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>1から数えた現在のページのページ数です。</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>関連する <a class=\"reference internal\" href=\"#django.core.paginator.Paginator\" title=\"django.core.paginator.Paginator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Paginator</span></code></a> オブジェクトです。</p>\n</dd></dl>\n\n</section>\n</section>","rootId":"module-django.core.paginator","toc":[{"title":"カスタマイズ例","anchor":"example","children":[]},{"title":"Paginator をビューで使用する","anchor":"using-paginator-in-a-view","children":[]},{"title":"Paginator オブジェクト","anchor":"paginator-objects","children":[{"title":"Required arguments","anchor":"required-arguments","children":[]},{"title":"Optional arguments","anchor":"optional-arguments","children":[]},{"title":"メソッド","anchor":"methods","children":[]},{"title":"属性","anchor":"attributes","children":[]}]},{"title":"InvalidPage 例外","anchor":"invalidpage-exceptions","children":[]},{"title":"Page オブジェクト","anchor":"page-objects","children":[{"title":"メソッド","anchor":"id1","children":[]},{"title":"属性","anchor":"id2","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/2.1/topics/"}],"prev":{"docname":"topics/logging","title":"ロギング","url":"/ja/2.1/topics/logging/"},"next":{"docname":"topics/security","title":"Django におけるセキュリティ","url":"/ja/2.1/topics/security/"},"formats":{"html":"/ja/2.1/topics/pagination/","markdown":"/ja/2.1/topics/pagination.md","json":"/ja/2.1/topics/pagination.json"},"source":"https://github.com/django/django/blob/stable/2.1.x/docs/topics/pagination.txt","official":"https://docs.djangoproject.com/ja/2.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","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}