Пример #1
0
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,
        }))
Пример #2
0
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,
        })
    )
Пример #3
0
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})
Пример #4
0
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)
Пример #5
0
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())