### VIEW: class DealListView(ListView): model = Deal paginate_by = 50 def get_queryset(self): queryset = super().get_queryset() sort_by = self.request.GET.get('sort_by', 'title') if sort_by.startswith('-'): queryset = queryset.order_by(sort_by) else: queryset = queryset.order_by(sort_by).reverse() if sort_by == 'created_on': queryset = queryset.order_by('-created_on') return queryset def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) sort_by = self.request.GET.get('sort_by', 'title') context['sort_by'] = sort_by context['sort_title_asc'] = '?sort_by=title' context['sort_title_desc'] = '?sort_by=-title' context['sort_created_on_asc'] = '?sort_by=created_on' context['sort_created_on_desc'] = '?sort_by=-created_on' return context ### TEMPLATE: Deal {% if sort_by in '-title' and sort_title_asc %} {% if sort_title_asc == request.path_info %} ▲ {% else %} ▼ {% endif %} {% endif %}