def search(request): if request.POST: form = SearchForm(request.POST) if form.is_valid(): #Based on http://stackoverflow.com/questions/1957240/filter-using-q-object-with-dynamic-from-user/1957263#1957263 queryset = form.cleaned_data['search_field'].split() query = reduce( operator.or_, ((Q(title__icontains=x) | Q(description__icontains=x)) for x in queryset)) #results = Image.objects.filter(Q(title__iexact = query) | Q(description__icontains = query)) results = Image.objects.filter(query) else: results = [] else: form = SearchForm() results = [] #results = Image.objects.all() return render_to_response( 'search.html', RequestContext(request, { 'form': form, 'search_results': results, }))
def search(request): if request.POST: form = SearchForm(request.POST) if form.is_valid(): #Based on http://stackoverflow.com/questions/1957240/filter-using-q-object-with-dynamic-from-user/1957263#1957263 queryset = form.cleaned_data['search_field'].split() query = reduce(operator.or_, ((Q(title__icontains = x) | Q(description__icontains = x)) for x in queryset)) #results = Image.objects.filter(Q(title__iexact = query) | Q(description__icontains = query)) results = Image.objects.filter(query) else: results = [] else: form = SearchForm() results = [] #results = Image.objects.all() return render_to_response( 'search.html', RequestContext(request, { 'form': form, 'search_results': results, }) )
def search(request): """A view that displays the product search.""" if request.method == 'POST': form = SearchForm(request.POST) if form.is_valid(): search_prod = form.cleaned_data['search'] product = Product.objects.\ filter(name__icontains=search_prod).first() if product is not None: subsitutes = Product.objects.filter( Q(nutri_score__lte=product.nutri_score), Q(category__in=product.category.all())).\ distinct('name', 'nutri_score').order_by('nutri_score') return render(request, 'search.html', {'search': search_prod, 'products': subsitutes, 'form': form}) else: render(request, 'search.html', {'search': search_prod, 'products': product, 'form': form}) else: form = SearchForm() return render(request, 'search.html', {'form': form})
def subcategory(request, category_name_slug, subcategory_name_slug, template='website/subcategory.html', extra_context=None): context_dict = {} # set the initial using what was sent in the get request form = DateFilterForm(initial=request.GET) context_dict['form'] = form search_form = SearchForm(initial=request.GET) context_dict['search_form'] = search_form # get todays date for filtering recommendations by today = date.today() try: user = request.user category = Category.objects.get(slug=category_name_slug) context_dict['category'] = category subcategory = SubCategory.objects.get(slug=subcategory_name_slug, category=category) context_dict['subcategory_name'] = subcategory.name context_dict['subcategory'] = subcategory website_list = (WebsiteRecommendation.objects.filter( subcategory=subcategory).annotate( totalvotes=Count('upvote') - Count('downvote')).order_by('-totalvotes')) context_dict['websites'] = website_list book_list = (BookRecommendation.objects.filter( subcategory=subcategory).annotate( totalvotes=Count('upvote') - Count('downvote')).order_by('-totalvotes')) context_dict['books'] = book_list video_list = (VideoRecommendation.objects.filter( subcategory=subcategory).annotate( totalvotes=Count('upvote') - Count('downvote')).order_by('-totalvotes')) context_dict['videos'] = video_list except SubCategory.DoesNotExist: raise Http404 except Category.DoesNotExist: raise Http404 if request.method == 'GET': form = DateFilterForm(request.GET) if form.is_valid(): filter_type = (form.cleaned_data['time_filter']) if filter_type == 'newest': website_list = (WebsiteRecommendation.objects.filter( subcategory=subcategory).order_by('-created_date')) context_dict['websites'] = website_list book_list = (BookRecommendation.objects.filter( subcategory=subcategory).order_by('-created_date')) context_dict['books'] = book_list video_list = (VideoRecommendation.objects.filter( subcategory=subcategory).order_by('-created_date')) context_dict['videos'] = video_list elif filter_type == 'best-of-year': website_list = (WebsiteRecommendation.objects.filter( subcategory=subcategory, created_date__year=today.year).annotate( totalvotes=Count('upvote') - Count('downvote')).order_by('-totalvotes')) context_dict['websites'] = website_list book_list = (BookRecommendation.objects.filter( subcategory=subcategory, created_date__year=today.year).annotate( totalvotes=Count('upvote') - Count('downvote')).order_by('-totalvotes')) context_dict['books'] = book_list video_list = (VideoRecommendation.objects.filter( subcategory=subcategory, created_date__year=today.year).annotate( totalvotes=Count('upvote') - Count('downvote')).order_by('-totalvotes')) context_dict['videos'] = video_list elif filter_type == 'best-of-month': website_list = (WebsiteRecommendation.objects.filter( subcategory=subcategory, created_date__year=today.year, created_date__month=today.month).annotate( totalvotes=Count('upvote') - Count('downvote')).order_by('-totalvotes')) context_dict['websites'] = website_list book_list = (BookRecommendation.objects.filter( subcategory=subcategory, created_date__year=today.year, created_date__month=today.month).annotate( totalvotes=Count('upvote') - Count('downvote')).order_by('-totalvotes')) context_dict['books'] = book_list video_list = (VideoRecommendation.objects.filter( subcategory=subcategory, created_date__year=today.year, created_date__month=today.month).annotate( totalvotes=Count('upvote') - Count('downvote')).order_by('-totalvotes')) context_dict['videos'] = video_list search_form = SearchForm(request.GET) if search_form.is_valid(): search_keywords = (search_form.cleaned_data['search_box']) context_dict['search_keywords'] = search_keywords if search_keywords != '': # add weighting to gear more towards title? website_list = (WebsiteRecommendation.objects.annotate( search=SearchVector('title', 'description'), ).filter( subcategory=subcategory, search=SearchQuery(search_keywords))) context_dict['websites'] = website_list book_list = (BookRecommendation.objects.annotate( search=SearchVector('title', 'book_description'), ).filter( subcategory=subcategory, search=SearchQuery(search_keywords))) context_dict['books'] = book_list video_list = (VideoRecommendation.objects.annotate( search=SearchVector( 'title', 'video_description'), ).filter( subcategory=subcategory, search=SearchQuery(search_keywords))) context_dict['videos'] = video_list if extra_context is not None: context_dict.update(extra_context) return render(request, template, context_dict)
def search(request, search_string=None, title='Search', words=None): r_server = _get_redis() # replace search string underscores with spaces if search_string: search_string = search_string.strip().replace('_', ' ') # HANDLES EMPTY OR NULL SEARCH STRING if search_string == None and request.method != 'POST': form = SearchForm() return _render(request, 'website/search.html', locals()) # CHECK IF IT'S A POST REQUEST OR URL SEARCH if search_string == None and request.method == 'POST': form = SearchForm(request.POST) if form.is_valid(): search_string = form.cleaned_data['char'] else: # POST AND NO SEARCH STRING - SHOW THEM THE PLAIN JANE SEARCH PAGE form = SearchForm() return _render(request, 'website/search.html', locals()) # HANDLES AN AMBIGUOUS SEARCH if _is_ambiguous(search_string): message = messages.AMBIGUOUS_WORD return render(request, 'problem.html', locals()) if r_server.exists((settings.PINYIN_WORD_KEY % _pinyin_to_ascii(search_string))): return _pinyin_search(request, search_string) if _is_english(search_string): return _english_search(request, search_string) # IF THE SEARCH IS OVER 10 CHARACTERS, RETURN A TEXT #if len(search_string) > 12: # from creader.views import text # return text(request, words=search_string) if not words: things = _split_unicode_chrs(search_string) words = _group_words(things) # IF THE USER WAS LOGGED IN, RECORD IT IN THEIR 'SAVED WORDS' if request.user.is_authenticated(): for x in words: word_searched.send( sender=word_searched, word=x.chars, time=datetime.datetime.now(), user_id=request.user.email ) # if there's only 1 word, take us straight to the single word definition if len(words) == 1: word = words[0] url = reverse('single_word', args=[word]) return HttpResponseRedirect(url) return _render(request, 'website/wordlist.html', locals())