본문 바로가기
개인 공부/개발

장고 페이징(마지막 페이지 구현)

by 아메리카노와떡볶이 2021. 8. 10.
728x90
def index(request):
    """
    pybo 목록 출력
    """
    # 입력 파라미터
    # ==> http://localhost:8000/pybo/?page=1 과 같다
    page = request.GET.get('page','1') # 페이지

    # 조회
    # Question 모델에서 데이터들을 생성일자 역순으로 정렬하여
    # 리스트로 저장한것이 question_list
    question_list = Question.objects.order_by('-create_date')

    # 페이징 처리 와 마지막 페이지
    paginator = Paginator(question_list, 10) # 페이지당 10개씩
    max_index = len(paginator.page_range)

    # 페이징 객체 생성
    page_obj = paginator.get_page(page)

    context = {'question_list': page_obj,'max_index': max_index}
    #question_list는 페이징 객체
    return render(request, 'pybo/question_list.html', context)

 

마지막 페이지를 구현하기 위해 max_index 변수를 넘겨주었다. 페이지당 10개의 게시글을 표시했을때 총 생성되는 페이지의 길이를 구해서 render 함수를 통해 템플릿파일에 넘겨주면

 

 

 <!-- 페이징처리 시작 -->
    <ul class="pagination justify-content-center">
        <!-- 처음 page -->
        {% if question_list.has_previous %}
        <li class="page-item">
            <a class="page-link" href="?page={{ 1 }}">처음</a>
        </li>
        {% else %}
        <li class="page-item disabled">
            <a class="page-link" tabindex="-1" aria-disabled="true" href="#">처음</a>
        </li>
        {% endif %}
        <!-- 이전페이지 -->
        {% if question_list.has_previous %}
        <li class="page-item">
            <a class="page-link" href="?page={{ question_list.previous_page_number }}">이전</a>
        </li>
        {% else %}
        <li class="page-item disabled">
            <a class="page-link" tabindex="-1" aria-disabled="true" href="#">이전</a>
        </li>
        {% endif %}
        <!-- 페이지리스트 -->
        {% for page_number in question_list.paginator.page_range %}
        {% if page_number >= question_list.number|add:-5 and page_number <= question_list.number|add:5 %}
            {% if page_number == question_list.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 %}
        {% endif %}
        {% endfor %}
        <!-- 다음페이지 -->
        {% if question_list.has_next %}
        <li class="page-item">
            <a class="page-link" href="?page={{ question_list.next_page_number }}">다음</a>
        </li>

        <li class="page-item">
            <span class="page-link" href="?page={{ max_index }}">...</span>
        </li>
        <li class="page-item">
            <a class="page-link" href="?page={{ max_index }}">{{ max_index }}</a>
        </li>
        {% else %}
        <li class="page-item disabled">
            <a class="page-link" tabindex="-1" aria-disabled="true" href="#">다음</a>
        </li>
        {% endif %}
    </ul>
    <!-- 페이징처리 끝 -->
    <a href="{% url 'pybo:question_create' %}" class="btn btn-primary">질문 등록하기</a>

마지막 페이지로 이동하는 버튼을 생성할 수 있다.

아래는 그 결과이다.

728x90

'개인 공부 > 개발' 카테고리의 다른 글

sfoj 개발 - 작성자(글쓴이) 표시하기  (0) 2021.08.25
sfoj 개발 - 회원가입 구현  (0) 2021.08.25
장고 폼(form)  (0) 2021.08.09
부트스트랩과 html  (0) 2021.08.08
장고 데이터 저장과 스타일 시트  (0) 2021.08.05

댓글