점프투장고 3-16 추가기능 관련
안녕하세요
점프 투 장고 3장까지 완료하고 추가 기능을 구현해보려고 했는데 시작부터 막혀서 조언을 구하고자 합니다..
답변 페이징을 구현하려고 하는데 페이지 번호가 뜨지를 않네요ㅠ
코드는 아래와 같습니다.(질문에 해당하는 코드만 발췌했습니다)
pybo\views\answer_views.py
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect, resolve_url
from django.utils import timezone
from django.core.paginator import Paginator
from ..forms import AnswerForm
from ..models import Question, Answer
def detail_index(request): #답변 페이징 추가한 부분
# 입력 파라미터
page=request.GET.get('page', '1')
#조회#########
answer_list=Answer.objects.order_by('-create_date')
#페이징###########
paginator_a=Paginator(answer_list, 10)
page_obj_a=paginator_a.get_page(page)
###
context={'answer_list': page_obj_a}
return render(request, 'pybo/question_detail.html', context)
pybo\urls.py
from django.urls import path
from .views import base_views, question_views, answer_views, comment_views, vote_views
app_name='pybo'
urlpatterns=[
# base_views.py
path('', base_views.index, name='index'),
path('<int:question_id>/', base_views.detail, name='detail'),
# question_views.py
path('question/create/', question_views.question_create, name='question_create'),
path('question/modify/<int:question_id>/', question_views.question_modify, name='question_modify'),
path('question/delete/<int:question_id>/', question_views.question_delete, name="question_delete"),
# answer_views.py **#urls.py에는 아무것도 추가하지 않음**
path('answer/create/<int:question_id>/', answer_views.answer_create, name='answer_create'),
path('answer/modify/<int:answer_id>/', answer_views.answer_modify, name='answer_modify'),
path('answer/delete/<int:answer_id>/', answer_views.answer_delete, name='answer_delete'),
templates\pybo\question_detail.html
<ul class="pagination justify-content-center">
<!----이전페이지---->
{% if answer_list.has_previous %}
<li class="page-item">
<a class="page-link" href="?page={{answer_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 answer_list.paginator.page_range %}
{% if page_number == answer_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}}"></a>
</li>
{% endif %}
{% endfor %}
<!-----다음페이지------>
{% if answer_list.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{answer_list.next_page_number}}">다음</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" tabindex="-1" aria-disabled="true" href="#">다음</a>
</li>
{% endif %}
</ul>
<!-----페이징처리 끝------->
제 생각에는 answer_views.py의 answer_list가 제대로 객체를 가져오지 못해서 페이지 번호가 안뜨는거 같은데 어떻게 수정하면 될까요?
글이 많이 길어져서 죄송하지만 알려주시면 감사하겠습니다 ㅠㅠ
ecila7290 님 1107
2020년 9월 3일 10:00 오후
3개의 답변이 있습니다. 1 / 1 Page
answer_list=Answer.objects.order_by('-create_date')
이렇게 되어 있는 부분을 다음처럼 고치셔야 할 것 같네요.
answer_list = Answer.objects.filter(question=question).order_by('-create_date')
해당 질문에 달린 답변들만 가져오려면 위처럼 question 조건을 주셔야 합니다.
박응용 님
2020년 9월 4일 4:59 오후
detail_index 이라는 함수는 새로 만드신 건가요?
답변페이징이라면 원래 상세화면 조회하는 question_detail 함수내에 작성해야 할텐데요...
박응용 님
2020년 9월 4일 9:24 오전
댓글에 작성한 detail 함수는 이렇게 되어있습니다..
이 부분 외에 확인해야할 곳이 있을까요?
pybo\views\base_views.py
from django.core.paginator import Paginator
from django.shortcuts import render, get_object_or_404
from django.db.models import Q, Count
from ..models import Question, Answer
#인덱스 함수 생략
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
# 입력 파라미터
page_a=request.GET.get('page', '1')
#조회#########
answer_list=Answer.objects.order_by('-create_date')
#페이징###########
paginator_a=Paginator(answer_list, 10)
page_obj_a=paginator_a.get_page(page_a)
context = {'question': question, 'answer_list': page_obj_a}
return render(request, 'pybo/question_detail.html', context)
2020년 9월 4일 3:46 오후