from django.core.paginator import Paginator, EmptyPage from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector from django.shortcuts import render from django.http import HttpResponse from models import Bookmark def index(request, page=1, tag=None, domain=None, search=None): obj = Bookmark.objects.all() if tag: obj = obj.filter(tags__name__in=tag.split(',')).distinct() if domain: obj = obj.filter(domain=domain) query = request.GET.get('q', None) if query: tagobj = obj.filter(tags__name__in=[query,]) vector = SearchVector('title', 'desc', 'domain', 'url') obj = obj.annotate(rank=SearchRank(vector, query)).order_by('-rank') obj = (obj | tagobj).distinct() paginator = Paginator(obj, 10) try: bookmarks = paginator.page(page) except EmptyPage: bookmarks = paginator.page(paginator.num_pages) bm_list = [] date = (0,0,0) day = [] for bm in bookmarks: # Create sublists of bookmarks by date bm_date = (bm.date.day, bm.date.month, bm.date.year) if bm_date != date: if day: bm_list.append(day) date = bm_date day = [] day.append(bm) bm_list.append(day) return render(request, 'bookmarks.htm', {'bookmarks': bm_list, 'paginator': bookmarks})