def post_search(request): ''' 搜索 :param request: :return: ''' form = SearchForm() query = None results = [] if 'query' in request.GET: form = SearchForm(request.GET) if form.is_valid(): query = form.cleaned_data['query'] # 设置搜索权重 search_vector = SearchVector('title', weight='A') + SearchVector( 'body', weight='B') search_query = SearchQuery(query) results = Post.objects.annotate( search=search_vector, rank=SearchRank( search_vector, search_query)).filter(rank__gte=0.3).order_by('-rank') return render(request, 'blog/post/search.html', { 'query': query, 'form': form, 'results': results })
def search_by_key_words(request): needed_posts = [] posts = BlogPost.objects.all() search_form = SearchForm(request.POST) if search_form.is_valid(): search_form.save() d = search_form.cleaned_data key_words = d['keywords'] key_words = key_words.split() for key_word in key_words: for post in posts: if key_word in post.title or key_word in post.article: needed_posts.append(post) return render_to_response('post/posts.html', { 'posts': needed_posts, 'form': search_form }, context_instance=RequestContext(request)) else: categories = BlogPostCategory.objects.all() new_posts = BlogPost.objects.all()[:2] return render_to_response('base.html', { 'categories': categories, 'new_posts': new_posts, 'form': search_form }, context_instance=RequestContext(request))
def post_search(request): form = SearchForm() query = None results = [] if 'query' in request.GET: form = SearchForm(request.GET) if form.is_valid(): query = form.cleaned_data['query'] search_vector = SearchVector('title', weight='A') + SearchVector( 'body', weight='B') search_query = SearchQuery(query) # results = Post.objects.annotate( # rank=SearchRank(search_vector, search_query) # ).filter(rank__gte=0.3).order_by('-rank') results = Post.objects.annotate(similarity=TrigramSimilarity( 'title', query), ).filter(similarity__gt=0.1).order_by('-similarity') return render(request, 'blog/post/search.html', { 'form': form, 'query': query, 'results': results })
def post_search(request): form = SearchForm(request.GET or None) query = None posts = None page_obj = None paginator = None if form.is_valid(): query = form.cleaned_data['query'] search_vector = SearchVector('title', weight='A') + SearchVector('body', weight='B') search_query = SearchQuery(query) posts = Post.published.annotate(rank=SearchRank(search_vector, search_query)).filter( rank__gte=0.3).order_by('-rank') paginator = Paginator(posts, settings.POSTS_PER_PAGE) page = request.GET.get('page', 1) try: posts = paginator.page(page) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) page_obj = pager.Page(posts.number, paginator.num_pages) return render(request, 'blog/post/list.html', { 'query': query, 'paginator': paginator, 'posts': posts, 'page_obj': page_obj, })
def post_search(request): form = SearchForm() if 'query' in request.GET: form = SearchForm(request.GET) if form.is_valid(): cd = form.cleaned_data results = SearchQuerySet.models(Post).filter(content=cd['query']).load_all() # count total results total_results = results.count() return render(request, 'blog/post/search.html', {'form': form, 'cd': cd, 'results': results, 'total_results': total_results})
def get_queryset(self): from django.db.models import Q if self.request.method == 'GET': form = SearchForm(self.request.GET) if form.is_valid(): query = form.cleaned_data['query'] words = query.split(' ') qobjects = [Q(body__icontains=w) | Q(title__icontains=w) for w in words] condition = reduce(lambda x,y: x & y, qobjects) results = BlogPost.objects.filter(condition) return results return BlogPost.objects.none()
def search(request): if request.method == "POST": form = SearchForm(request.POST) if form.is_valid(): query = form.cleaned_data['query'] post_list = Post.objects.filter(Q(name__icontains=query) | Q(post_text__icontains=query) | Q(author__name__icontains=query) | Q(author__description__icontains=query)) news_list = News.objects.filter(Q(headline__icontains=query) | Q(news_text__icontains=query)) print('abc') return render(request, "search_list.html", {'post_list': post_list, 'news_list': news_list })
def search(request): global page_article_list, search_list, search_result try: if request.method == 'GET': searchform = SearchForm(request.GET) if searchform.is_valid(): search_result = searchform.cleaned_data['search'] search_list = Article.objects.filter(category__article__title__icontains=search_result) print(search_list) page_article_list = getPage(request, search_list) print(page_article_list) except Exception as e: logger.error(e) return render(request, 'search.html', {'article_list': page_article_list, 'search_list': search_list,'search_result':search_result})
def post_search(request): form = SearchForm() if 'query' in request.GET: form = SearchForm(request.GET) if form.is_valid(): cd = form.cleaned_data results = SearchQuerySet.models(Post).filter( content=cd['query']).load_all() # count total results total_results = results.count() return render(request, 'blog/post/search.html', { 'form': form, 'cd': cd, 'results': results, 'total_results': total_results })
def post_search(request): form = SearchForm() query = None results = [] if 'query' in request.GET: form = SearchForm(request.GET) if form.is_valid(): query = form.cleaned_data['query'] results = Post.objects.annotate(similarity=TrigramSimilarity( 'title', query), ).filter(similarity__gt=0.3).order_by('-similarity') return render(request, 'app/blog.html', { 'form': form, 'query': query, 'results': results })
def search(request): search_form = SearchForm(request.GET) found_articles = [] if search_form.is_valid() and (search_form.cleaned_data["phrase"] or search_form.cleaned_data["tags"]): found_articles = (Article.search_articles( search_form.cleaned_data["phrase"], search_form.cleaned_data["tags"])) return render_to_response( "search.html", { "page_title": ugettext("Search"), "found_articles": found_articles, "search_form": search_form, }, context_instance=RequestContext(request), )
def post_search(request): form = SearchForm() query = None results = [] if 'query' in request.GET: form = SearchForm(request.GET) if form.is_valid(): query = form.cleaned_data['query'] search_vector = SearchVector('title', 'body') search_query = SearchQuery(query) results = Post.published.annotate( search=search_vector, rank=SearchRank(search_vector, search_query), ).filter(search=search_query).order_by('-rank') return render(request, 'blog/post/search.html', { 'form': form, 'query': query, 'results': results })
def post_search(req): form = SearchForm() data = None results = None total_results = None if 'query' in req.GET: form = SearchForm(req.GET) if form.is_valid(): data = form.cleaned_data results = SearchQuerySet().models(Post).filter( content=data['query']).load_all() #Todo total_results = results.count() return render( req, 'blog/post/search.html', { 'form': form, 'data': data, 'results': results, 'total_results': total_results })
def search_results(request): search_form = SearchForm() if 'query' in request.GET: form = SearchForm(request.GET) if form.is_valid(): cd = form.cleaned_data results = SearchQuerySet().models(Post).filter(content=cd['query']).load_all() # count total results total_results = results.count() return render(request, 'blog/post/search_results.html', { 'form': form, 'cd': cd, 'results': results, 'total_results': total_results, 'search_form': search_form }) return HttpResponse('Please submit a search term.')
def search_by_key_words(request): needed_posts = [] posts = BlogPost.objects.all() search_form = SearchForm(request.POST) if search_form.is_valid(): search_form.save() d = search_form.cleaned_data key_words = d['keywords'] key_words = key_words.split() for key_word in key_words: for post in posts: if key_word in post.title or key_word in post.article: needed_posts.append(post) return render_to_response('post/posts.html',{'posts':needed_posts,'form':search_form},context_instance=RequestContext(request)) else : categories = BlogPostCategory.objects.all() new_posts = BlogPost.objects.all()[:2] return render_to_response('base.html', {'categories': categories, 'new_posts': new_posts, 'form': search_form}, context_instance=RequestContext(request))
def search(request): if request.method == 'POST': print(request.POST.get('q')) form = SearchForm(request.POST) if form.is_valid(): queryset = Post.objects.all() query = form.cleaned_data.get('q') if query: queryset = queryset.filter( Q(main_title__icontains=query) | Q(short_description__icontains=query)).distinct() context = { 'queryset': queryset, } return render(request, template_name='blog/search_results.html', context=context) return render(request, template_name='blog/search_results.html')
def post_search(request): form = SearchForm() context = dict() if 'query' in request.GET: form = SearchForm(request.GET) # form validation if form.is_valid(): cd = form.cleaned_data results = SearchQuerySet().models(Post).filter( content=cd['query']).load_all() # count total results total_results = results.count() context['cd'] = cd context['results'] = results context['total_results'] = total_results context['form'] = form return render(request, 'blog/post/search.html', context)
def search(request, search_request=None, type_request=None): try: template = 'blog/search.html' args = {} if request.method == 'POST': form = SearchForm(request.POST) if form.is_valid(): request_type = form.cleaned_data['request_type'] request_value = form.cleaned_data['request'] if request_type == 'tag': existing_tags = [t.tag for t in Tag.objects.all()] tags = [tag for tag in request_value.split() if tag in existing_tags] list_post = [] for post in Post.objects.filter(visible=True): post_tags = [t.tag for t in post.tag.all()] if all(tag in post_tags for tag in tags): list_post.append(post) args.update({'posts': list_post}) elif request_type == 'user': args.update({'posts': Post.objects.filter(visible=True, user=User.objects.get(username=request_value))}) elif request_type == 'post': args.update({'posts': Post.objects.filter(visible=True, title=request_value)}) else: form = SearchForm() args.update({'user': request.user}) args.update({'form': form}) except: raise Http404() return render_to_response(template, args)
def rss(request): if request.method == 'GET': form = SearchForm(initial={'title_word': "."}) return render(request, 'blog/rss.html', { 'form': form, "lms" : LanMu.objects.all(), "right": common_content(), }) if request.method == 'POST': form = SearchForm(request.POST) # 探究搜索关键词为空的内容// 搜素全部为 . if form.is_valid(): tag = form.cleaned_data['tag'] start_date = form.cleaned_data['serach_start'] end_date = form.cleaned_data['serach_end'] word = form.cleaned_data['title_word'] temp_res = Article.objects.all() result1 = [x for x in temp_res if x.pub_date.date() > start_date and x.pub_date.date() <= end_date] result0 = [x for x in result1 if x.column == tag] result = [] for x in result0: if re.match(".*" + word + ".*", x.title): result.append(x) return render(request, "blog/rss.html", { 'form': form, "blogs": result, "lms" : LanMu.objects.all(), "right": common_content(), }) return render(request, 'blog/rss.html', { 'form': form, "lms" : LanMu.objects.all(), "right": common_content(), })
def post_search(request): # Поиск постов по названию и тексту form = SearchForm() query = None results = [] if 'query' in request.GET: form = SearchForm(request.GET) if form.is_valid(): query = form.cleaned_data['query'] # Установка большего веса вектора поиска для title для повышения релевантности search_vector = SearchVector('title', weight='A') + \ SearchVector('body', weight='B') search_query = SearchQuery(query) results = Post.published.annotate( search=search_vector, rank=SearchRank( search_vector, search_query)).filter(rank__gte=0.3).order_by('-rank') return render(request, 'blog/post/search.html', { 'form': form, 'query': query, 'results': results })
def api_call(request): endpoint = 'http://api.moemoe.tokyo/anime/v1/master' # リクエストがpostであることをチェック if request.method == 'POST': # フォームデータを取得 form = SearchForm(request.POST) # フォームのデータが安全かチェック if form.is_valid(): # データを受け取る year = form.cleaned_data['year'] cours = form.cleaned_data['cours'] if year: query = str(year) url = endpoint + "/" + query else: form = SearchForm() messages = ["放送年を選択してください"] context = {'messages': messages, 'form': form} return render(request, 'blog/anime_search.html', context) if cours: query = str(cours) url = url + "/" + query response = requests.get(url) anime_list = response.json() form = SearchForm() page_obj = blog_option_view.paginate_queryset(request, anime_list, 10) context = { 'anime_list': page_obj.object_list, 'form': form, 'year': year, 'cours': cours, 'page_obj': page_obj, } return render(request, 'blog/anime_search.html', context) else: form = SearchForm() messages = ["放送年を選択してください"] context = {'messages': messages, 'form': form} return render(request, 'blog/anime_search.html', context) else: # 最初にブラウザから呼び出されるときに使用するフォームクラスを指定 form = SearchForm() # ページネーションバーからGETで遷移したときの処理 # ページネーションしてきたときはクエリにyear,coursがあるのでそれを判定して分岐に入る if 'year' in request.GET: year = request.GET.get('year') url = endpoint + "/" + year cours = request.GET.get('cours') if cours: cours = request.GET.get('cours') url = url + "/" + cours response = requests.get(url) anime_list = response.json() page_obj = blog_option_view.paginate_queryset(request, anime_list, 10) context = { 'anime_list': page_obj.object_list, 'form': form, 'year': year, 'cours': cours, 'page_obj': page_obj, } return render(request, 'blog/anime_search.html', context) # 作成されたフォームオブジェクトをコンテキストへ格納 context = {'form': form} # 最初にブラウザから呼び出されたときに指定テンプレートとコンテキストで描画する return render(request, 'blog/anime_search.html', context)
def test_valid_search_form(self): form = SearchForm({ 'query': 'Django', }) self.assertTrue(form.is_valid())
def test_invalid_search_form_without_all_fields(self): form = SearchForm({}) self.assertFalse(form.is_valid())
def test_invalid_search_form_with_empty_query(self): form = SearchForm({ 'query': '', }) self.assertFalse(form.is_valid())