장고

개발 일지 18 - 카테고리 별 분류

sorecord 2024. 9. 1. 09:44

간단하게 카테고리를 1,2로 나누었다.

 

게시글을 나열하고 출력하는 부분은 다 구현을 했으니 값을 받아올때 카테고리 별로 나누어서 받아오면 된다고 생각했다.

 

 category = request.GET.get('category','all')  # 선택된 카테고리 가져오기
    print(category)
    if category == 'all' or category == '': 
        post_list = Post_information.objects.all().annotate(like_count=Count('like_users')).order_by('-created_at')#좋아요도 표시
    else:
        post_list = Post_information.objects.filter(category=category).annotate(like_count=Count('like_users')).order_by('-created_at')#좋아요도 표시

 

원래는 게시글의 값 전부를 받아서 html파일에 전송을 해주는 함수였는데 카테고리가 들어올 경우에 filter기능을 사용해서 category값만 받아서 전송을 하는 조건문을 만들어주었다.

 

문제없이 잘 구분이 되었다.

 

이제 카테고리를 나눈뒤 정렬 기능을 사용하려고 할때 잘 실행이 되는지 확인을 했는데 카테고리를 나눈 것이 다 해제되고 전체 게시글 정렬이 되거나 카테고리 값을 제대로 받지 못하는 문제가 생겼다. 

 

 

category = request.GET.get('category')
    # 기본 정렬: 최신순
     # 기본적으로 모든 게시글을 가져오되, 카테고리가 선택된 경우 필터링
    print(category,'========================================')
    if category:

        posts = Post_information.objects.filter(category=category)
    else:
        posts = Post_information.objects.all()
    print(posts)
    if sort_option == 'views_desc':
            print('-view')
            posts = posts.annotate(like_count=Count('like_users')).order_by('-views')
    elif sort_option == 'views_asc':
            print("view")
            posts = posts.annotate(like_count=Count('like_users')).order_by('views')
    elif sort_option == 'likes_desc':
    ...............
    ........
    .....
    ..

 

처음에 위와 같이 정렬하는 함수에 category를 구분을 해주었다. 

 

하지만 카테고리 값이 자꾸 none이나 비는 문제가 발생해서 값을 유지하기 위해 html파일을 수정해주었다. 

 

<form method="get" action="{% url 'post_sort' %}" style="display:inline;">
         <input type="hidden" name="sort" value="likes_asc">
         <input type="hidden" name="category" value="{{  request.GET.category }}">
        <button type="submit" {% if request.GET.sort == 'likes_asc' %}class="active"{% endif %}>
                좋아요 적은 순
        </button>
 </form>

 

이 외에 다른 정렬버튼들도 전부 hidden 값으로 category값이 유지 될 수 있게 구현을 했고 

 

 <form method="get" action=".">
      <select id="category" name="category" onchange="this.form.submit()">
      <option value="">--------</option>
      <option value="category1" {% if category == 'category1' %}selected{% endif %}>카테고리 1</option>
      <option value="category2" {% if category == 'category2' %}selected{% endif %}>카테고리 2</option>
      <!-- 다른 카테고리 추가 가능 -->
      </select>
      <input type="hidden" name="sort" value="{{ request.GET.sort }}">
</form>

 

category를 선택하는 경우에도 sort값이 유지 될 수 있게 hidden로 값을 넣어주었다. 

 

위와 같이 수정을 해주니 문제없이 잘 실행되었다.