def get_common_context(request): c = {} c['request_url'] = request.path c['categories'] = Category.get_all() c['registration_form'] = RegistrationForm() c['reviews'] = Review.get_recent(COMMENTS_COUNT_ON_PAGE) c['comments'] = Comment.get_recent(COMMENTS_COUNT_ON_PAGE) c['marks'] = [x for x in range(1, 10)] c['genres'] = Genre.get_all() c['fandoms'] = Fandom.get_all() c['warnings'] = Warning.get_all() c['categoriest_first_part'], c['categoriest_second_part'] = Category.get_two_parts() c['genre_f_part'], c['genre_s_part'], c['genre_t_part'], c['genre_fo_part'] = Genre.get_four_parts() c.update(csrf(request)) return c
def search(request): c = get_common_context(request) c['title'] = u'Результаты поиска' c['search_objects'] = None if request.GET.get('search', None): search_text = request.GET.get('search') search_results = watson.search(search_text, ranking=True) work_ids = [] search_objects = {} for res in search_results: res_class = res.object.__class__.__name__ if res_class == 'Work': work_id = res.object.id elif res_class == 'Review': work_id = res.object.work.id elif res_class == 'Comment': work_id = res.object.work_part.work.id if not work_id in work_ids: work_ids.append(work_id) search_objects[work_id] = {} reviews = search_objects[work_id].get('reviews',[]) comments = search_objects[work_id].get('comments',[]) if res_class == 'Review': reviews.append(res.object) search_objects[work_id]['reviews'] = reviews elif res_class == 'Comment': comments.append(res.object) search_objects[work_id]['comments'] = comments funfics = Work.objects.filter(id__in=work_ids) sort_par = request.GET.get('sort', 'time') if sort_par == 'vizits': funfics = funfics.order_by('-vizits') elif sort_par == 'comments': funfics = funfics.order_by('-commetns') elif sort_par == 'rating': funfics = funfics.order_by('-mark') else: funfics = funfics.order_by('-last_editing_time') sort_par = 'time' c['sort'] = sort_par paginator = Paginator(funfics, FUNCICS_COUNT_ON_PAGE) page = int(request.GET.get('page', '1')) try: funfics = paginator.page(page) except PageNotAnInteger: page = 1 funfics = paginator.page(page) except EmptyPage: page = paginator.num_pages funfics = paginator.page(page) c['page'] = page c['page_range'] = paginator.page_range if len(c['page_range']) > 1: c['need_pagination'] = True c['funfics'] = funfics c['old_args'] = request.META['QUERY_STRING'].replace('page', 'o').replace('sort', 'o') c['reviews'] = Review.get_recent(COMMENTS_COUNT_ON_PAGE) c['comments'] = Comment.get_recent(COMMENTS_COUNT_ON_PAGE) c['search_text'] = search_text c['search_objects'] = search_objects c['fun_title'] = u'Результаты поиска по "%s"' % search_text return render_to_response('search.html', c, context_instance=RequestContext(request)) else: return HttpResponseRedirect('/')