-
[django] 하나의 URL 에서 여러 페이지네이션 구현하기Python & Django 2021. 9. 10. 03:47
home 화면에 movies, books, people 각각의 페이지네이션을 구현하고자 함. 그런데 url 에 ?page= 로 페이지번호를 받아오면, movies, books, people 이 페이지가 모두 동일해져버림.. 이를 해결하기 위해 ?movie_page= 이런 식으로 각각 page 를 만들어주고, request 로 url 에서 받아옴.
from django.shortcuts import render from django.core.paginator import Paginator from movies import models as movie_models from books import models as book_models from people import models as people_models def resolve_home(request): movie_page = request.GET.get("movie_page") movie_list = movie_models.Movie.objects.all() movie_paginator = Paginator(movie_list, 5) movies = movie_paginator.get_page(movie_page) book_page = request.GET.get("book_page") book_list = book_models.Book.objects.all() book_paginator = Paginator(book_list, 5) books = book_paginator.get_page(book_page) person_page = request.GET.get("person_page") person_list = people_models.Person.objects.all() person_paginator = Paginator(person_list, 5) people = person_paginator.get_page(person_page) return render(request, "home.html", {"movies":movies, "books":books, "people":people})
html 에서도 그냥 ?page= 가 아니라 ?movie_page= 와 같은 방법으로 세 가지 각각의 페이지네이션 구현. movies 의 페이지를 넘기더라도 books, people 의 페이지에는 영향 없음.
<h1>Welcome home</h1> <div> <h2>Latest Movies</h2> <ul> {% for movie in movies %} <li>{{movie.title}}</li> {% endfor %} </ul> <span> {% if movies.has_previous %} <a href="?movie_page=1">« first</a> <a href="?movie_page={{movies.previous_page_number}}">Previous</a> {% endif %} <span> Page {{movies.number}} of {{movies.paginator.num_pages}} </span> {% if movies.has_next %} <a href="?movie_page={{movies.next_page_number}}">Next</a> <a href="?movie_page={{movies.paginator.num_pages}}">last »</a> {% endif %} </span> </div> <div> <h2>Latest Books</h2> <ul> {% for book in books %} <li>{{book.title}}</li> {% endfor %} </ul> <span> {% if books.has_previous %} <a href="?book_page=1">« first</a> <a href="?book_page={{books.previous_page_number}}">Previous</a> {% endif %} <span> Page {{books.number}} of {{books.paginator.num_pages}} </span> {% if books.has_next %} <a href="?book_page={{books.next_page_number}}">Next</a> <a href="?book_page={{books.paginator.num_pages}}">last »</a> {% endif %} </span> </div> <div> <h2>Latest People</h2> <ul> {% for person in people %} <li>{{person.name}}</li> {% endfor %} </ul> <span> {% if people.has_previous %} <a href="?person_page=1">« first</a> <a href="?person_page={{people.previous_page_number}}">Previous</a> {% endif %} <span> Page {{people.number}} of {{people.paginator.num_pages}} </span> {% if people.has_next %} <a href="?person_page={{people.next_page_number}}">Next</a> <a href="?person_page={{people.paginator.num_pages}}">last »</a> {% endif %} </span> </div>
'Python & Django' 카테고리의 다른 글
[장고 스터디 1주차] 장고 개념 정리 (0) 2021.09.17 [django] DetailView의 get_context_data 사용해서 객체 정보 전달하기 (0) 2021.09.14 [django] command 만들기 OneToOneField (0) 2021.09.08 [django] 페이지네이션 구현하기(장고 Paginator) (0) 2021.08.04 [django] 블로그 카테고리 게시판 만들기(카테고리 별 게시물 리스트, 카테고리 리스트 한 화면에 구현하기) (0) 2021.08.04