장고
개발 일지 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로 값을 넣어주었다.
위와 같이 수정을 해주니 문제없이 잘 실행되었다.