src/egonomy/views.py
changeset 43 119cd616faa4
parent 41 92e530850200
child 45 ea2c1961a515
equal deleted inserted replaced
42:277ebc746baf 43:119cd616faa4
     7 from django.template import RequestContext
     7 from django.template import RequestContext
     8 from egonomy.models import ImageMetadata, Image, Fragment
     8 from egonomy.models import ImageMetadata, Image, Fragment
     9 from egonomy.search_indexes import QueryParser
     9 from egonomy.search_indexes import QueryParser
    10 from egonomy.search_indexes.paginator import SearchPaginator
    10 from egonomy.search_indexes.paginator import SearchPaginator
    11 from egonomy.search_indexes.query import ModelRelatedSearchQuerySet
    11 from egonomy.search_indexes.query import ModelRelatedSearchQuerySet
       
    12 from haystack.query import RelatedSearchQuerySet
    12 import logging
    13 import logging
    13 
    14 
    14 logger = logging.getLogger(__name__)
    15 logger = logging.getLogger(__name__)
    15 
    16 
    16 
    17 
   123                               {'results':results, 'nb_pages':paginator.num_pages, 'cur_page_nb':cur_page_nb, "search":search, "nb_results":nb_results, "url_pagination":url_pagination},
   124                               {'results':results, 'nb_pages':paginator.num_pages, 'cur_page_nb':cur_page_nb, "search":search, "nb_results":nb_results, "url_pagination":url_pagination},
   124                               context_instance=RequestContext(request))
   125                               context_instance=RequestContext(request))
   125 
   126 
   126 
   127 
   127 def all_fragments(request):
   128 def all_fragments(request):
   128     
   129         
   129     # Get the cur_page_nb number parameter if possible
   130     # Get the cur_page_nb number parameter if possible
   130     cur_page_nb = request.GET.get("page") or 1
   131     cur_page_nb = request.GET.get("page") or 1
   131     cur_page_nb = int(cur_page_nb)
   132     cur_page_nb = int(cur_page_nb)
   132     
   133 
   133     frg_list = Fragment.objects.all().order_by('pk').select_related('image', 'image__info', 'image__metadata','author')
   134     search = None
       
   135     nb_results = 1
       
   136     if "search" in request.GET:
       
   137         search = request.GET["search"]
       
   138         field = "all"
       
   139         if "field" in request.GET:
       
   140             field = request.GET["field"]
       
   141 
       
   142     frg_list = Fragment.objects.select_related('image', 'image__info', 'image__metadata','author')
   134     nb = getattr(settings,"IMAGES_PER_PAGE", 32)
   143     nb = getattr(settings,"IMAGES_PER_PAGE", 32)
   135     paginator = Paginator(frg_list, nb)
   144     if search:
       
   145         if not field or field == 'all':
       
   146             field = 'text'
       
   147         qp = QueryParser(field)
       
   148         res = RelatedSearchQuerySet().filter(qp.parse(search)).models(Fragment).load_all_queryset(Fragment, frg_list).load_all()
       
   149         paginator = SearchPaginator(res, nb)
       
   150     else:
       
   151         frg_list = frg_list.order_by('pk').all()
       
   152         paginator = Paginator(frg_list, nb)
       
   153         
   136     try:
   154     try:
   137         results = paginator.page(cur_page_nb)
   155         results = paginator.page(cur_page_nb)
   138     except (EmptyPage, InvalidPage):
   156     except (EmptyPage, InvalidPage):
   139         results = paginator.page(paginator.num_pages)
   157         results = paginator.page(paginator.num_pages)
       
   158         
       
   159     url_pagination = reverse("all_fragments")
       
   160     if search:
       
   161         url_pagination = url_pagination + "?search=" + search
       
   162         
   140 
   163 
   141     return render_to_response("egonomy_all_fragments.html",
   164     return render_to_response("egonomy_all_fragments.html",
   142                               {'results':results, 'nb_pages':paginator.num_pages, 'cur_page_nb':cur_page_nb},
   165                               {"search_fragment":True, 'results':results, 'nb_pages':paginator.num_pages, 'cur_page_nb':cur_page_nb, "search":search, "nb_results":nb_results, "url_pagination":url_pagination},
   143                               context_instance=RequestContext(request))
   166                               context_instance=RequestContext(request))
   144 
   167 
   145 
   168 
   146 
   169