質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

389閲覧

カテゴリごとのページネーション

dada12

総合スコア11

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/05/16 13:25

カテゴリごとのページネーションの実装

PythonのDjangoを使ってブログを作成しています。
只今カテゴリごとにページネーション機能を使って1ページごとに1件ずつ表示する機能を実装しようとしているのですが、
カテゴリ全件を取得してしまってしまいます。

該当のソースコード

python

1from django.shortcuts import render, get_object_or_404 2from .models import Post 3from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 4from django.views import generic 5 6 7 8# Create your views here. 9def paginate_queryset(request, queryset, count): 10 11 paginator = Paginator(queryset, count) 12 page = request.GET.get('page',1) 13 try: 14 page_obj = paginator.page(page) 15 except PageNotAnInteger: 16 page_obj = paginator.page(1) 17 except EmptyPage: 18 page_obj = paginator.page(paginator.num_pages) 19 return page_obj 20 21def post_list(request): 22 posts = Post.objects.all() 23 page_obj = paginate_queryset(request, posts, 1) 24 print(page_obj.count) 25 return render(request, 'blog.html', { 26 'posts': posts, 27 'post_list': page_obj.object_list, 28 'page_obj': page_obj, 29 }) 30 31 32def PostDetail(request, pk): 33 article = get_object_or_404(Post,id=pk) 34 35 return render(request, 'article.html',{ 36 'article': article 37 }) 38 39def Big_List(request): 40 Big_Category = Post.objects.filter(category__parent__name='Python') 41 page_obj = paginate_queryset(request, Big_Category, 1) 42 print(page_obj.object_list,) 43 return render(request, 'Category.html', { 44 'bigs':Big_Category, 45 'post_list': page_obj.object_list, 46 'page_obj': page_obj, 47 })

HTML

1{% extends 'layout.html' %} 2 3{% load staticfiles %} 4 5{% block body %} 6 7<div class="container "> 8 9<main > 10 <div class="offset-md-4 fixed-center "> 11 {% for big in bigs %} 12 <div class="card justify-content-center mt-5 ml-0 w-auto" > 13 <a href="{% url 'MyBlog:detail' big.id %}"></a> 14 <div class="card-header bg-dark text-white"> 15 <a href="{% url 'MyBlog:detail' big.id %}" class="text-reset"> 16 <h3 class="card-title">{{ big.title }}</h3> 17 </a> 18 </div> 19 <div class="card-body"> 20 <h5><p class="card-text">{{ big.text_to_markdown | safe | truncatechars_html:10 | linebreaksbr }}</p></h5> 21 </div> 22 <div style="text-align: right;"> 23 <a href="{% url 'MyBlog:detail' big.id %}">記事を読む</a> 24 </div> 25 </div> 26{% endfor %} 27 28 29 <div class=" mt-4 "> 30 31<ul class="pagination justify-content-center" > 32 <!-- 前へ の部分 --> 33 {% if page_obj.has_previous %} 34 <li class="page-item"> 35 <a class="page-link" href="?page={{ page_obj.previous_page_number }}"> 36 <span aria-hidden="true">前へ</span> 37 </a> 38 </li> 39 {% endif %} 40 41 <!-- 数字の部分 --> 42 {% for num in page_obj.paginator.page_range %} 43 {% if page_obj.object_list == num %} 44 <li class="page-item active"><a class="page-link" href="#!">{{ num }}</a></li> 45 {% else %} 46 <li class="page-item"><a class="page-link" href="?page={{ num }}">{{ num }}</a></li> 47 {% endif %} 48 {% endfor %} 49 50 <!-- 次へ の部分 --> 51 {% if page_obj.has_next %} 52 <li class="page-item"> 53 <a class="page-link" href="?page={{ page_obj.next_page_number }}"> 54 <span aria-hidden="true">次へ</span> 55 </a> 56 </li> 57 {% endif %} 58</ul> 59</div> 60 61 </div> 62</main> 63 64</div> 65 66{% endblock %}

補足情報(FW/ツールのバージョンなど)

・Windows10
・Python3.6.8
・Django2.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

テンプレート変数で、 bigs は絞り込み前の一覧、 post_list は絞り込み後の一覧を指す形にされているので、テンプレート内の bigs の部分を post_list に変更するとよいのではないでしょうか。

patch

1- {% for big in bigs %} 2+ {% for big in post_list %}

(もしこれ ↑ が正しいなら、テンプレート変数 bigs そのものが不要になるのではないかと思います)

(ご提示のコードはすべては拝見していません。読み飛ばしているので根本的なところで勘違いがあればすみません。)

投稿2019/05/19 09:14

gh640

総合スコア1407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dada12

2019/05/20 13:20

コードの該当箇所を直したところちゃんと動作しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問