Django를 사용하여 웹 애플리케이션을 개발할 때, 사용자가 원하는 기준으로 데이터를 정렬하는 기능은 매우 중요하다. 이번 블로그에서는 Django에서 날짜, 좋아요 수, 댓글 수에 따라 데이터를 정렬하는 방법을 설명한다.
url.py)정렬을 위한 URL 설정:
정렬 기능을 구현하려면 먼저 URL 설정을 통해 정렬 기준에 따라 데이터를 요청할 수 있도록 해야 한다. 아래 코드는 products 앱의 URL 패턴을 정의한 것이다.
from django.urls import path
from products import views
app_name = 'products'
urlpatterns = [
path('create/', views.create, name='create'),
path('<int:pk>/', views.details, name='details'),
path('<int:pk>/delete/', views.delete, name='delete'),
path('<int:pk>/update/', views.update, name='update'),
path('<int:pk>/comments/', views.comments, name='comments'),
path('<int:pk>/comments_delete/', views.comments_delete, name='comments_delete'),
path('<int:pk>/like/', views.like, name='like'),
]
index.html)사용자에게 정렬 옵션 제공:
사용자가 원하는 정렬 기준을 선택할 수 있도록 HTML 템플릿에 링크를 추가한다. 이 링크를 통해 사용자는 날짜, 좋아요, 댓글 수 중에서 선택하여 데이터를 정렬할 수 있다.
<p>
<a href="?sort=date">날짜순 | </a>
<a href="?sort=likes">인기순 | </a>
<a href="?sort=comments">댓글순</a>
</p>
views.py)정렬 기능 구현:
views.py에서 사용자가 선택한 정렬 기준에 따라 데이터를 정렬하여 반환하는 기능을 구현한다. 아래의 코드는 sort GET 파라미터를 사용하여 데이터를 정렬하는 방법을 보여준다.
from django.db.models import Count
def index(request):
sort = request.GET.get('sort', 'date') # 기본값은 날짜순으로 설정
if sort == 'likes':
products = Product.objects.annotate(like_count=Count('like_users')).order_by('-like_count', '-created_at') # 좋아요 순으로 정렬
elif sort == 'comments':
products = Product.objects.annotate(comment_count=Count('comments')).order_by('-comment_count', '-created_at') # 댓글 순으로 정렬
else:
products = Product.objects.all().order_by('-created_at') # 날짜 순으로 정렬
context = {
'products': products,
}
return render(request, 'products/index.html', context)
정렬 기준에 따른 데이터 반환:
위의 코드에서 sort 파라미터를 통해 정렬 기준을 결정한 후, annotate와 order_by 메서드를 사용하여 데이터를 정렬한다. 정렬된 데이터는 products 리스트에 저장되며, 이를 템플릿에 전달하여 화면에 표시된다.