Jjangoのページネーション.



ページ付けは、ウェブサイトのコンテンツ、またはウェブサイトからコンテンツの一部を別々のページに分割するプロセスです.つの“100のブログの記事のリスト”のコンテンツの巨大なリストで作業するときに彼/彼女のウェブサイトをより効率的に使用するようにページ化を使用する必要があります.また、コンテンツを追記するウェブサイトは、コンテンツと混雑している訪問者を一度に小さなコンテンツに焦点を当てるから役立ちます.これは、読みやすさを増加し、訪問者は再びあなたのウェブサイトに戻りそうです. DjangoはPaginatorと呼ばれる事前に構築されたクラスを持ち、ページ化されたデータを作成して管理します.次のコードでインポートできます.
from django.core.paginator import Paginator

Djangoでは、ビューは関数ベースのビューとクラスベースのビューである2種類です.両方の種類のビューには、コンテンツを表示する方法が異なりますが、全体的な作業は同じです.
このチュートリアルでは、“すべてのブログプラットフォームの1つ”と呼ばれる私のプロジェクトを使用します.私のプロジェクトの完全なソースコードのためにoneforall-blog githubリポジトリ.
https://github.com/magbanum/oneforall-blog/
このプロジェクトでは、私はblog この関数は、次のコードを使用して「newsView」ビューを使用します
blog/views.py

def newsview(request):
    blogs = get_news()
    return render(request, 'blog/news_posts.html',{'blogs':blogs})

The newsview 関数は別の関数からデータを収集し、それをテンプレートnews_posts.html そして、テンプレートがそのデータを表示します.HTMLコードはこのようになります.
blog/template/blog/news_posts.html

 {% for blog in blogs %}
  <div class="col">
        ....
        <h5 class="mb-1">{{ blog.title }}</h5>
        ....
  </div>
{% endfor %}

現在、newsviewnews_posts.html テンプレートは、単一のページにブログに格納されているすべての項目を表示します.ですから、項目をページ化するコードを追加する必要があります.
まずインポートしましょうPaginator 次のコード行を使用します.
from django.core.paginator import Paginator

関数ベースのビューでは、ページ化するデータと、データをページ化する項目数を指定する必要があります.のためにnewsview の内容をページ化したいblogs 6項目.また、前のコードではblogs テンプレートに、しかし、現在、我々はそうであるPagizedされたデータを返す必要がありますpage_obj . 最終的なコードになります.
プロジェクトディレクトリ:blog/views.py
from django.core.paginator import Paginator

def newsview(request):
    blogs = get_news()
    paginator = Paginator(blogs, 6)
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)

    return render(request, 'blog/news_posts.html',{'page_obj':page_obj})

私たちが正常にデータをページ化したので、我々は我々の中でそれを表示する必要がありますnews_posts.html テンプレート.また、訪問者のためのナビゲーションパネルをページ間を移動するために追加する必要があります.しかし、心配することは、最初の、前、次、最後のページのリンクを使用して簡単なナビゲーションを含むコードのいくつかの行があります.最終的なテンプレートはこのようになります.
プロジェクトディレクトリ:blog/template/blog/news_posts.html
{% for blog in page_obj %}
  <div class="col">
        ....
        <h5 class="mb-1">{{ blog.title }}</h5>
        ....
  </div>
{% endfor %}

<!-- For page navigation links -->
<div class="pagination" style="width: fit-content;">
    <span class="step-links">
    {% if page_obj.has_previous %}
        <a href="?page=1" class="page-link" style="display: inline;">&laquo; first</a>
        <a href="?page={{ page_obj.previous_page_number }}" class="page-link" style="display: inline;">previous</a>
    {% endif %}

    <span class="current">
        Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
    </span>

    {% if page_obj.has_next %}
        <a href="?page={{ page_obj.next_page_number }}" class="page-link" style="display: inline;">next</a>
        <a href="?page={{ page_obj.paginator.num_pages }}" class="page-link" style="display: inline;">last &raquo;</a>
    {% endif %}
    </span>
</div>

そしてそれです.サーバーを実行した後、ナビゲーションリンクでページ間を移動するには、うまく組織化されたコンテンツを取得します.
対面後の額面
| |
クラスベースのListViewの場合は、Paginator ASListView 独自の方法でリストを表示します.私たちがしなければならないのは、リストをページ化したい番号を指定することです.プロジェクト“すべてのブログシステム”のいずれかのクラスベースのビューにもHomeView 6つの項目でページ化されます.
プロジェクトディレクトリ:blog/views.py
from django.views.generic import ListView

class HomeView(ListView):
    paginate_by = 6
    model = Post
    template_name = 'blog/home.html'
    ordering = ['-post_date']

残りのステップは、関数ベースのビューと同じです.我々は我々と同じようにナビゲーションリンクを追加することができますnewsview . テンプレートのコードを見ることができますhome.html here .
すべてのブログプラットフォームのためのhttps://oneforall-blog.herokuapp.com/ コードの動作を確認します.
そして、それはすべてのジャンゴのページです.私のプロジェクトの完全なソースコードのためにhere そして、あなたが私の仕事が好きならば、星を与えてください.
この記事があなたにとって役に立つことを願っています.あなたのメールボックスに直接私のブログ柱を得るために、ニュースレターを購読してください📬.