[django] django 페이지네이션 기능

11166 단어 djangodjango

🌱페이지네이션

장고에서 페이지네이션 기능만들기! 템플릿에는 부트스트랩 pagination 컴포넌트를 사용하였다!

#views.py

def business_list(request):
   business_list = Business.objects.all().order_by('-id') #데이터 역순 정렬
   page = request.GET.get('page', '1') #GET 방식으로 정보를 받아오는 데이터
   paginator = Paginator(business_list, '2') #Paginator(분할될 객체, 페이지 당 담길 객체수)
   paginated_business_lists = paginator.get_page(page) #페이지 번호를 받아 해당 페이지를 리턴
   ctx = {'business_list':business_list,'paginated_business_lists':paginated_business_lists}

   return render(request, template_name='list.html', context=ctx)

여기서 페이징 객체인 paginated_business_lists 에는 다양한 속성이 있다.
더 많은 속성은 여기

#templates
 
<div class="board-pagination">
	<ul class="pagination">
	<!-- 이전페이지 -->
		{% if paginated_business_lists.has_previous %} //이전페이지가 있으면 연결
		<li class="page-item">
			<a class="page-link" tabindex="-1"  href="?page={{ paginated_business_lists.previous_page_number }}">&laquo;</a>
		</li>
		{% else %}
        <li class="page-item disabled">
        	<a class="page-link" href="#">&laquo;</a>
        </li>
        {% endif %}
        <!-- 페이지리스트 -->
        {% for page_number in paginated_business_lists.paginator.page_range %} //페이지 범위를 하나씩 리턴
       {page.number}}
        // 현재 페이지일 때는 active
        {% if page_number == paginated_business_lists.number %} 
        <li class="page-item active" aria-current="page">
        	<a class="page-link" href="?page={{ page_number }}">{{ page_number }}</a>
        </li>
        {% else %}
        <li class="page-item">
        	<a class="page-link" href="?page={{ page_number }}">{{ page_number }}</a>
       </li>
        {% endif %}
        {% endfor %}
        <!-- 다음페이지 -->
        {% if paginated_business_lists.has_next %}
        <li class="page-item">
        	<a class="page-link" href="?page={{ business_lists.next_page_number }}">&raquo;</a>
        </li>
        {% else %}
        <li class="page-item disabled">
         	<a class="page-link" tabindex="-1" href="#">&raquo;</a>
       	</li>
       	{% endif %}
	</ul>
</div>

{{paginated_business_lists.paginator.page_range}}로 전체 페이지 범위(1,2,3)를 받고 페이지를 하나씩 리턴한다. 현재페이지가 1페이지라 active상태이다.

좋은 웹페이지 즐겨찾기