def test_post_reorder(self): # Check order before reordering self.assertEqual(Query.get("Hello").editors_picks.all()[0], self.search_pick) self.assertEqual(Query.get("Hello").editors_picks.all()[1], self.search_pick_2) # Submit post_data = { 'query_string': "Hello", 'editors_picks-TOTAL_FORMS': 2, 'editors_picks-INITIAL_FORMS': 2, 'editors_picks-MAX_NUM_FORMS': 1000, 'editors_picks-0-id': self.search_pick.id, 'editors_picks-0-DELETE': '', 'editors_picks-0-ORDER': 1, # Change 'editors_picks-0-page': 1, 'editors_picks-0-description': "Root page", 'editors_picks-1-id': self.search_pick_2.id, 'editors_picks-1-DELETE': '', 'editors_picks-1-ORDER': 0, # Change 'editors_picks-1-page': 2, 'editors_picks-1-description': "Homepage", } response = self.client.post(reverse('wagtailsearchpromotions:edit', args=(self.query.id, )), post_data) # User should be redirected back to the index self.assertRedirects(response, reverse('wagtailsearchpromotions:index')) # Check that the ordering has been saved correctly self.assertEqual(SearchPromotion.objects.get(id=self.search_pick.id).sort_order, 1) self.assertEqual(SearchPromotion.objects.get(id=self.search_pick_2.id).sort_order, 0) # Check that the recommendations were reordered self.assertEqual(Query.get("Hello").editors_picks.all()[0], self.search_pick_2) self.assertEqual(Query.get("Hello").editors_picks.all()[1], self.search_pick)
def get_articles(request, search_type, search_for): """ View will return search results based instant search or clicking a category and name. Results will return a paginated response. """ template_name = "home/caos_home_page_search.html" unslug_search = search_for.replace('-', ' ') if 'category' in search_type: get_results = (CaosBlogPage.objects.live().search(unslug_search, fields=['category'])) query = Query.get(unslug_search) query.add_hit() elif 'author' in search_type: get_results = (CaosBlogPage.objects.live().search(unslug_search, fields=['author'])) query = Query.get(unslug_search) query.add_hit() else: get_results = CaosBlogPage.objects.none() context = { 'search_results': get_results, } return render(request, template_name, context)
def get_articles(request, search_type, search_for): """ View will return search results based instant search or clicking a category and name. Results will return a paginated response. """ template_name = "home/caos_home_page_search.html" unslug_search = search_for.replace('-', ' ') if 'category' in search_type: get_results = (CaosBlogPage.objects.live() .search(unslug_search, fields=['category'])) query = Query.get(unslug_search) query.add_hit() elif 'author' in search_type: get_results = (CaosBlogPage.objects.live() .search(unslug_search, fields=['author'])) query = Query.get(unslug_search) query.add_hit() else: get_results = CaosBlogPage.objects.none() context = { 'search_results': get_results, } return render(request, template_name, context)
def search(request, extra_context): # Search search_query = request.GET.get('query', None) if search_query: page_results = Page.objects.live().search(search_query).annotate_score("score") # Log the query so Wagtail can suggest promoted results Query.get(search_query).add_hit() # Also query non-wagtail models s = get_search_backend() model_results = s.search(search_query, BaseImpactModel.objects.filter(impact_model__public=True)) else: page_results = [] model_results = [] context = { 'search_query': search_query, 'page_results': page_results, 'model_results': model_results, } # raise Exception(dir(model_results[0])) if extra_context is not None: context.update(extra_context) # raise Exception(search_results) # Render template return render(request, 'pages/search_page.html', context)
def search(request, results_per_page=10): search_query = request.GET.get('q', None) page = request.GET.get('p', 1) locale = get_locale_code(get_language_from_request(request)) if search_query: results = ArticlePage.objects.filter( languages__language__locale=locale).live().search(search_query) Query.get(search_query).add_hit() else: results = ArticlePage.objects.none() paginator = Paginator(results, results_per_page) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render( request, 'search/search_results.html', { 'search_query': search_query, 'search_results': search_results, 'results': results, })
def entries_search(self, request, *args, **kwargs): search_query = request.GET.get('q', None) self.entries = self.get_entries() if search_query: self.entries = self.entries.search(search_query) self.search_term = search_query self.search_type = _('search') Query.get(search_query).add_hit() return Page.serve(self, request, *args, **kwargs)
def test_search_pick_create(self): # Create a search pick to the root page SearchPromotion.objects.create( query=Query.get("root page"), page_id=1, sort_order=0, description="First search promotion", ) # Check self.assertEqual(Query.get("root page").editors_picks.count(), 1) self.assertEqual(Query.get("root page").editors_picks.first().page_id, 1)
def search(request): search_query = request.GET.get("query", None) page = request.GET.get("page", 1) # Search if search_query: search_results = Page.objects.live().search(search_query) query = Query.get(search_query) # Record hit query.add_hit() # Get search picks search_picks = query.editors_picks.all() else: search_results = Page.objects.none() search_picks = EditorsPick.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render( request, "search/search.html", {"search_query": search_query, "search_results": search_results, "search_picks": search_picks}, )
def search(request): """ Simple Admin and Search Feature """ template_name = 'search/search.html' search_query = request.GET.get('query', None) page = request.GET.get('page', 1) if search_query: search_results = Page.objects.live().search(search_query) query = Query.get(search_query) query.add_hit() else: search_results = Page.objects.none() paginator = (Paginator(search_results, getattr(settings, 'MAX_PAGINATION_SEARCH', 10))) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) context = {'search_query': search_query, 'search_results': search_results} return render(request, template_name, context)
def setUp(self): self.login() # Create an search pick to delete self.query = Query.get("Hello") self.search_pick = self.query.editors_picks.create(page_id=1, description="Root page") self.search_pick_2 = self.query.editors_picks.create(page_id=2, description="Homepage")
def search_content(search_query): # Search search_results = Content.objects.live().exclude(url_path__startswith="/home/snippets/").search(search_query) query = Query.get(search_query) # Record hit query.add_hit() return search_results
def search(request): """Search for 'query'.""" search_query = request.GET.get("query", None) page = request.GET.get("page", 1) # Search if search_query: search_results = Page.objects.live().search(search_query) query = Query.get(search_query) # Record hit query.add_hit() else: search_results = Page.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render(request, "search/search.html", {"search_query": search_query, "search_results": search_results})
def search(request): search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: search_results = Page.objects.live().search(search_query) query = Query.get(search_query) # Record hit query.add_hit() else: search_results = Page.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) menus = Menu.objects.all() url = WikiHome.objects.first().url return render( request, 'search/search.html', { 'search_query': search_query, 'search_results': search_results, 'menus': menus, 'top_url': url, })
def search(request): search_query = request.GET.get('query', None) # post = request.GET.get('post', 1) # Search if search_query: s = get_search_backend() search_results = s.search(search_query, Post) query = Query.get(search_query) #search_results = list(chain(profile_results) # Record hit query.add_hit() else: search_results = Post.objects.none() # Pagination paginator = Paginator(search_results, 20) try: search_results = paginator.page(search_query) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render(request, 'search/search.html', { 'search_query': search_query, 'search_results': search_results, })
def search(request): # Search search_query = request.GET.get('query', None) if search_query: search_results = Page.objects.live().search(search_query) # Log the query so Wagtail can suggest promoted results Query.get(search_query).add_hit() else: search_results = Page.objects.none() # Render template return render(request, 'search/search_results.html', { 'search_query': search_query, 'search_results': search_results, })
def search(request): search_query = request.GET.get('q', None) page = request.GET.get('page', 1) # Search if search_query: search_results = HomePage.objects.live().search(search_query) query = Query.get(search_query) # Record hit query.add_hit() else: search_results = Page.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render( request, 'search_results.html', { 'search_query': search_query, 'search_results': search_results, 'search_title': "Search for Adventure Capitalists: {0}".format(search_query) })
def search(request): search_query = request.GET.get('s', None) page = request.GET.get('page', 1) # Search if search_query: search_results = Page.objects.live().search(search_query) query = Query.get(search_query) # Record hit query.add_hit() else: search_results = Page.objects.none() # Pagination paginator = Paginator(search_results, 10) try: posts = paginator.page(page) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) return render( request, 'search/search.html', { 'search_query': search_query, 'posts': posts, }) # yapf: disable
def search(request): search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: search_results = Page.objects.live().descendant_of( request.site.root_page).search(search_query) query = Query.get(search_query) # Record hit query.add_hit() else: search_results = Page.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render( request, 'search/search.html', { 'search_query': search_query, 'search_results': search_results, 'page': request.site.root_page })
def loop_search(request): search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: sandbox = IntranetHomePage.objects.get(title__contains='Sandbox') search_results = Page.objects.live().not_descendant_of(sandbox).search( search_query) query = Query.get(search_query) # Record hit query.add_hit() # Get search picks search_picks = query.editors_picks.all() else: search_results = Page.objects.none() search_picks = SearchPromotion.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render( request, 'search/loop_search.html', { 'search_query': search_query, 'search_results': search_results, 'search_picks': search_picks, })
def search(request): search_query = request.GET.get('q', None) page = request.GET.get('page', 1) # Search if search_query: search_results = HomePage.objects.live().search(search_query) query = Query.get(search_query) # Record hit query.add_hit() else: search_results = Page.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render(request, 'search_results.html', { 'search_query': search_query, 'search_results': search_results, 'search_title': "Search for Adventure Capitalists: {0}".format(search_query) })
def search(request): # Search search_query = request.GET.get('query', None) if search_query: search_results = Page.objects.live().search(search_query) query = Query.get(search_query) # Record hit query.add_hit() # Get search picks search_picks = query.editors_picks.all() else: search_results = Page.objects.none() search_picks = EditorsPick.objects.none() # Pagination page = request.GET.get('page', 1) paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render( request, 'demo/search_results.html', { 'search_query': search_query, 'search_results': search_results, 'search_picks': search_picks, })
def add(request): if request.POST: # Get query query_form = search_forms.QueryForm(request.POST) if query_form.is_valid(): query = Query.get(query_form['query_string'].value()) # Save search picks searchpicks_formset = forms.SearchPromotionsFormSet(request.POST, instance=query) if save_searchpicks(query, query, searchpicks_formset): messages.success(request, _("Editor's picks for '{0}' created.").format(query), buttons=[ messages.button(reverse('wagtailsearchpromotions:edit', args=(query.id,)), _('Edit')) ]) return redirect('wagtailsearchpromotions:index') else: if len(searchpicks_formset.non_form_errors()): # formset level error (e.g. no forms submitted) messages.error(request, " ".join(error for error in searchpicks_formset.non_form_errors())) else: # specific errors will be displayed within form fields messages.error(request, _("Recommendations have not been created due to errors")) else: searchpicks_formset = forms.SearchPromotionsFormSet() else: query_form = search_forms.QueryForm() searchpicks_formset = forms.SearchPromotionsFormSet() return render(request, 'wagtailsearchpromotions/add.html', { 'query_form': query_form, 'searchpicks_formset': searchpicks_formset, })
def search(request): search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: search_results = Page.objects.live().search(search_query, operator='and') query = Query.get(search_query) # Record hit query.add_hit() else: search_results = Page.objects.none() # Pagination paginator = Paginator(search_results, settings.DEFAULT_PER_PAGE) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render(request, 'search/search.html', { 'search_query': search_query, 'search_results': search_results, })
def search(request): # Search search_query = request.GET.get('query', None) if search_query: search_results = Page.objects.live().search(search_query) query = Query.get(search_query) # Record hit query.add_hit() # Get search picks search_picks = query.editors_picks.all() else: search_results = Page.objects.none() search_picks = SearchPromotion.objects.none() # Pagination page = request.GET.get('page', 1) paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render(request, 'swimtheme/search_results.html', { 'search_query': search_query, 'search_results': search_results, 'search_picks': search_picks, })
def search(request): search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: search_results = Page.objects.live().search(search_query) query = Query.get(search_query) # Record hit query.add_hit() else: search_results = Page.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render(request, 'search/search.html', { 'search_query': search_query, 'search_results': search_results, })
def search(request): search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: search_results = TNZListing.objects.filter(name__contains=search_query) query = Query.get(search_query) # Record hit query.add_hit() else: search_results = TNZListing.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render(request, 'search/search.html', { 'search_query': search_query, 'search_results': search_results, })
def edit(request, query_id): query = get_object_or_404(Query, id=query_id) if request.POST: # Get query query_form = search_forms.QueryForm(request.POST) # and the recommendations searchpicks_formset = forms.SearchPromotionsFormSet(request.POST, instance=query) if query_form.is_valid(): new_query = Query.get(query_form['query_string'].value()) # Save search picks if save_searchpicks(query, new_query, searchpicks_formset): messages.success(request, _("Editor's picks for '{0}' updated.").format(new_query), buttons=[ messages.button(reverse('wagtailsearchpromotions:edit', args=(query.id,)), _('Edit')) ]) return redirect('wagtailsearchpromotions:index') else: if len(searchpicks_formset.non_form_errors()): messages.error(request, " ".join(error for error in searchpicks_formset.non_form_errors())) # formset level error (e.g. no forms submitted) else: messages.error(request, _("Recommendations have not been saved due to errors")) # specific errors will be displayed within form fields else: query_form = search_forms.QueryForm(initial=dict(query_string=query.query_string)) searchpicks_formset = forms.SearchPromotionsFormSet(instance=query) return render(request, 'wagtailsearchpromotions/edit.html', { 'query_form': query_form, 'searchpicks_formset': searchpicks_formset, 'query': query, })
def search(request): query_string = request.GET.get("q", "") page = request.GET.get("p", 1) # Search if query_string != "": search_results = models.Page.search_frontend(query_string) # Get query object query = Query.get(query_string) # Add hit query.add_hit() # Pagination paginator = Paginator(search_results, 10) if paginator is not None: try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) else: search_results = None else: query = None search_results = None # Render if request.is_ajax(): template_name = getattr(settings, "WAGTAILSEARCH_RESULTS_TEMPLATE_AJAX", "wagtailsearch/search_results.html") else: template_name = getattr(settings, "WAGTAILSEARCH_RESULTS_TEMPLATE", "wagtailsearch/search_results.html") return render(request, template_name, dict(query_string=query_string, search_results=search_results, is_ajax=request.is_ajax(), query=query))
def loop_search(request): search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: sandbox = IntranetHomePage.objects.get(title__contains='Sandbox') search_results = Page.objects.live().not_descendant_of(sandbox).search(search_query) query = Query.get(search_query) # Record hit query.add_hit() # Get search picks search_picks = query.editors_picks.all() else: search_results = Page.objects.none() search_picks = SearchPromotion.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render(request, 'search/loop_search.html', { 'search_query': search_query, 'search_results': search_results, 'search_picks': search_picks, })
def search(request): do_json = 'json' in request.GET search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: page_alias_content_type = ContentType.objects.get_for_model(PageAlias) search_results = ( Page.objects.live() # exclude root and home pages .filter(depth__gt=2) # exclude PageAlias pages .exclude(content_type=page_alias_content_type) .search(search_query) ) query = Query.get(search_query) # log the query so Wagtail can suggest promoted results query.add_hit() # promoted search results promoted_page_ids = [ pick.page.id for pick in query.editors_picks.all() ] promoted_results = Page.objects.filter(pk__in=promoted_page_ids) # search Person snippets search_backend = get_search_backend() people_results = search_backend.search( search_query, Person.objects.all() ) else: search_results = Page.objects.none() promoted_results = Page.objects.none() people_results = Person.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) response = { 'search_query': search_query, 'search_results': search_results, 'promoted_results': promoted_results, 'people_results': people_results, } if do_json: return JsonResponse(get_results_json(response)) else: return render(request, 'search/search.html', response)
def search(request): tag = request.GET.get('t', None) if tag: search_results = BlogPage.objects.live().filter(tags__name=tag) return render( request, 'search/search_result.html', { 'search_query': None, 'blogs': search_results, 'tag': tag, 'category': None, }) category = request.GET.get('c', None) if category: cate = BlogIndexPage.objects.live().get(slug=category) title = cate.title search_results = cate.get_descendants() search_results = [x.specific for x in search_results] return render( request, 'search/search_result.html', { 'search_query': None, 'blogs': search_results, 'category': title, 'tag': None, }) date = request.GET.get('date', None) if date: year, month = date.split('m') search_query = year + '年' + month + '月' search_results = BlogPage.objects.live().filter( Q(date__year=year) & Q(date__month=month)) return render( request, 'search/search_result.html', { 'search_query': search_query, 'blogs': search_results, 'category': None, 'tag': None, }) search_query = request.GET.get('query', None) # Search if search_query: search_results = BlogPage.objects.live().search(search_query, operator='or') query = Query.get(search_query) # Record hit query.add_hit() else: search_results = Page.objects.none() return render( request, 'search/search_result.html', { 'search_query': search_query, 'blogs': search_results, 'category': None, 'tag': None, })
def make_search_picks(self): for i in range(50): SearchPromotion.objects.create( query=Query.get("query " + str(i)), page_id=1, sort_order=0, description="First search pick", )
def product_search(request): # Search search_query = request.GET.get('query', None) if search_query: search_results = ProductPage.objects.live().search(search_query) print search_results # Log the query so Wagtail can suggest promoted results Query.get(search_query).add_hit() else: search_results = ProductPage.objects.none() # Render template return render(request, 'fundraiser/search_results.html', { 'title': 'Product search results', 'search_query': search_query, 'search_results': search_results, })
def search(request): do_json = 'json' in request.GET search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: page_alias_content_type = ContentType.objects.get_for_model(PageAlias) search_results = ( Page.objects.live() # exclude root and home pages .filter(depth__gt=2) # exclude PageAlias pages .exclude( content_type=page_alias_content_type).search(search_query)) query = Query.get(search_query) # log the query so Wagtail can suggest promoted results query.add_hit() # promoted search results promoted_page_ids = [ pick.page.id for pick in query.editors_picks.all() ] promoted_results = Page.objects.filter(pk__in=promoted_page_ids) # search Person snippets search_backend = get_search_backend() people_results = search_backend.search(search_query, Person.objects.all()) else: search_results = Page.objects.none() promoted_results = Page.objects.none() people_results = Person.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) response = { 'search_query': search_query, 'search_results': search_results, 'promoted_results': promoted_results, 'people_results': people_results, } if do_json: return JsonResponse(get_results_json(response)) else: return render(request, 'search/search.html', response)
def search(request): # Search search_query = request.GET.get('q', None) if search_query: queryset = Page.objects.live().search(search_query) # logs the query so Wagtail can suggest promoted results Query.get(search_query).add_hit() else: queryset = Page.objects.none() search_results = _paginate(request, queryset) # Render template return render(request, 'cms/search.html', { 'search_query': search_query, 'search_results': search_results, })
def search(self): search_query = self.request.GET.get('query', None) if search_query: search_backend = get_search_backend() page_results = Page.objects.live().search(search_query) glossary_results = search_backend.search(search_query, Entry) Document = get_document_model() documents_results = search_backend.search(search_query, Document) # Log the query so Wagtail can suggest promoted results Query.get(search_query).add_hit() return { 'search_query': search_query or '', 'page_results': page_results, 'glossary_results': glossary_results, 'document_results': documents_results, } else: return {}
def test_get_search_promotions_template_tag(self): # Create a search pick to the root page pick = SearchPromotion.objects.create( query=Query.get("root page"), page_id=1, sort_order=0, description="First search pick", ) # Create another search pick against a different query SearchPromotion.objects.create( query=Query.get("root page again"), page_id=1, sort_order=0, description="Second search pick", ) # Check search_picks = list(get_search_promotions("root page")) self.assertEqual(search_picks, [pick])
def test_search_pick_ordering(self): # Add 3 search picks in a different order to their sort_order values # They should be ordered by their sort order values and not their insertion order SearchPromotion.objects.create( query=Query.get("root page"), page_id=1, sort_order=0, description="First search pick", ) SearchPromotion.objects.create( query=Query.get("root page"), page_id=1, sort_order=2, description="Last search pick", ) SearchPromotion.objects.create( query=Query.get("root page"), page_id=1, sort_order=1, description="Middle search pick", ) # Check self.assertEqual(Query.get("root page").editors_picks.count(), 3) self.assertEqual(Query.get("root page").editors_picks.first().description, "First search pick") self.assertEqual(Query.get("root page").editors_picks.last().description, "Last search pick")
def test_search_pick_ordering(self): # Add 3 search picks in a different order to their sort_order values # They should be ordered by their sort order values and not their insertion order SearchPromotion.objects.create( query=Query.get("root page"), page_id=1, sort_order=0, description="First search pick", ) SearchPromotion.objects.create( query=Query.get("root page"), page_id=1, sort_order=2, description="Last search pick", ) SearchPromotion.objects.create( query=Query.get("root page"), page_id=1, sort_order=1, description="Middle search pick", ) # Check self.assertEqual(Query.get("root page").editors_picks.count(), 3) self.assertEqual( Query.get("root page").editors_picks.first().description, "First search pick") self.assertEqual( Query.get("root page").editors_picks.last().description, "Last search pick")
def results(request): search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: homepage = Site.objects.get(site_name="Public").root_page unit_index_page = UnitIndexPage.objects.first() search_results = Page.objects.live().descendant_of(homepage).not_descendant_of(unit_index_page, True).search(search_query) query = Query.get(search_query) # Record hit query.add_hit() # Get search picks search_picks = query.editors_picks.all() else: search_results = Page.objects.none() search_picks = SearchPromotion.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) # Page context variables for templates home_page = StandardPage.objects.live().get(id=PUBLIC_HOMEPAGE) location_and_hours = get_hours_and_location(home_page) location = str(location_and_hours['page_location']) unit = location_and_hours['page_unit'] return render(request, 'results/results.html', { 'breadcrumb_div_css': 'col-md-12 breadcrumbs hidden-xs hidden-sm', 'content_div_css': 'container body-container col-xs-12 col-lg-11 col-lg-offset-1', 'search_query': search_query, 'search_results': search_results, 'search_picks': search_picks, 'page_unit': str(unit), 'page_location': location, 'address': location_and_hours['address'], 'chat_url': get_unit_chat_link(unit, request), 'chat_status': get_chat_status('uofc-ask'), 'chat_status_css': get_chat_status_css('uofc-ask'), 'hours_page_url': home_page.get_hours_page(request), 'self': { 'title': 'Search Results' } })
def results(request): search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: homepage = Site.objects.get(site_name="Public").root_page search_results = Page.objects.live().descendant_of(homepage).search(search_query) query = Query.get(search_query) # Record hit query.add_hit() # Get search picks search_picks = query.editors_picks.all() else: search_results = Page.objects.none() search_picks = SearchPromotion.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) # Page context variables for templates home_page = StandardPage.objects.live().get(id=PUBLIC_HOMEPAGE) location_and_hours = get_hours_and_location(home_page) location = str(location_and_hours['page_location']) unit = location_and_hours['page_unit'] return render(request, 'results/results.html', { 'breadcrumb_div_css': 'col-md-12 breadcrumbs hidden-xs hidden-sm', 'content_div_css': 'container body-container col-xs-12 col-lg-11 col-lg-offset-1', 'search_query': search_query, 'search_results': search_results, 'search_picks': search_picks, 'page_unit': str(unit), 'page_location': location, 'address': location_and_hours['address'], 'chat_url': get_unit_chat_link(unit, request), 'chat_status': get_chat_status('uofc-ask'), 'chat_status_css': get_chat_status_css('uofc-ask'), 'hours_page_url': home_page.get_hours_page(request), 'self': { 'title': 'Search Results' } })
def search(request, results_per_page=10): search_query = request.GET.get('q', None) page = request.GET.get('p', 1) if search_query: results = ArticlePage.objects.live().search(search_query) Query.get(search_query).add_hit() else: results = ArticlePage.objects.none() paginator = Paginator(results, results_per_page) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) return render(request, 'search/search_results.html', { 'search_query': search_query, 'search_results': search_results, 'results': results, })
def search(request): search_query = request.GET.get('query', None) page_number = request.GET.get('page', 1) # Allow to filter search results using a page types, if specified page_types = PageType.objects.all() selected_page_type_pks = request.GET.getlist('type', None) # Use really existing pks try: selected_page_type_pks = \ set(int(pk) for pk in selected_page_type_pks) & \ set(obj.pk for obj in page_types) except ValueError: selected_page_type_pks = [] search_results = get_search_queryset(request, selected_page_type_pks) # Do not display ResearchSummaryPage pages in the main search search_results = search_results.not_type(ResearchSummaryPage) # Search if search_query: search_results = search_results.search(search_query, operator='and') query = Query.get(search_query) # Record hit query.add_hit() # Pagination paginator = Paginator(search_results, settings.DEFAULT_PER_PAGE) try: search_results = paginator.page(page_number) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) extra_url_params = '&'.join(['type={}'.format(type) for type in selected_page_type_pks]) context = { 'search_query': search_query, 'search_results': search_results, 'page_types': page_types, 'selected_page_type_pks': selected_page_type_pks, 'extra_url_params': extra_url_params, } context.update(get_adjacent_pages(paginator, page_number)) return render(request, 'search/search.html', context)
def edit(request, query_id): query = get_object_or_404(Query, id=query_id) if request.POST: # Get query query_form = search_forms.QueryForm(request.POST) # and the recommendations searchpicks_formset = forms.SearchPromotionsFormSet(request.POST, instance=query) if query_form.is_valid(): new_query = Query.get(query_form['query_string'].value()) # Save search picks if save_searchpicks(query, new_query, searchpicks_formset): messages.success( request, _("Editor's picks for '{0}' updated.").format(new_query), buttons=[ messages.button( reverse('wagtailsearchpromotions:edit', args=(query.id, )), _('Edit')) ]) return redirect('wagtailsearchpromotions:index') else: if len(searchpicks_formset.non_form_errors()): messages.error( request, " ".join(error for error in searchpicks_formset.non_form_errors())) # formset level error (e.g. no forms submitted) else: messages.error( request, _("Recommendations have not been saved due to errors")) # specific errors will be displayed within form fields else: query_form = search_forms.QueryForm(initial=dict( query_string=query.query_string)) searchpicks_formset = forms.SearchPromotionsFormSet(instance=query) return render( request, 'wagtailsearchpromotions/edit.html', { 'query_form': query_form, 'searchpicks_formset': searchpicks_formset, 'query': query, })
def test_results_are_ordered_alphabetically(self): self.make_search_picks() SearchPromotion.objects.create( query=Query.get("aaargh snake"), page_id=1, sort_order=0, description="ooh, it's a snake", ) response = self.client.get(reverse('wagtailsearchpromotions:index')) # Check response self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, 'wagtailsearchpromotions/index.html') # "aargh snake" should be the first result alphabetically self.assertEqual(response.context['queries'][0].query_string, "aaargh snake")
def test_post(self): # Submit post_data = { 'query_string': "test", 'editors_picks-TOTAL_FORMS': 1, 'editors_picks-INITIAL_FORMS': 0, 'editors_picks-MAX_NUM_FORMS': 1000, 'editors_picks-0-DELETE': '', 'editors_picks-0-ORDER': 0, 'editors_picks-0-page': 1, 'editors_picks-0-description': "Hello", } response = self.client.post(reverse('wagtailsearchpromotions:add'), post_data) # User should be redirected back to the index self.assertRedirects(response, reverse('wagtailsearchpromotions:index')) # Check that the search pick was created self.assertTrue(Query.get('test').editors_picks.filter(page_id=1).exists())
def get_search_promotions(search_query): if search_query: return Query.get(search_query).editors_picks.all() else: return SearchPromotion.objects.none()
def search(request): do_json = 'json' in request.GET search_query = request.GET.get('query', None) page = request.GET.get('page', 1) # Search if search_query: page_alias_content_type = ContentType.objects.get_for_model(PageAlias) search_results = ( Page.objects.live() # exclude root and home pages .filter(depth__gt=2) # exclude PageAlias pages .exclude(content_type=page_alias_content_type) .search(search_query) ) query = Query.get(search_query) # log the query so Wagtail can suggest promoted results query.add_hit() # promoted search results promoted_page_ids = [ pick.page.id for pick in query.editors_picks.all() ] promoted_results = Page.objects.filter(pk__in=promoted_page_ids) else: search_results = Page.objects.none() promoted_results = Page.objects.none() # Pagination paginator = Paginator(search_results, 10) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) response = { 'search_query': search_query, 'search_results': search_results, 'promoted_results': promoted_results, } if do_json: results_json = { 'search_query': search_query, 'search_results': [], } for result_type in ('promoted_results', 'search_results'): for page in response[result_type]: result = {} result['title'] = page.specific.title result['url'] = page.specific.url result['content_type'] = page.specific.content_type.name if result not in results_json['search_results']: results_json['search_results'].append(result) return JsonResponse(results_json) else: return render(request, 'search/search.html', response)
def search( request, template=None, template_ajax=None, results_per_page=10, use_json=False, json_attrs=['title', 'url'], show_unpublished=False, search_title_only=False, extra_filters={}, path=None): # Get default templates if template is None: if hasattr(settings, 'WAGTAILSEARCH_RESULTS_TEMPLATE'): template = settings.WAGTAILSEARCH_RESULTS_TEMPLATE else: template = 'wagtailsearch/search_results.html' if template_ajax is None: if hasattr(settings, 'WAGTAILSEARCH_RESULTS_TEMPLATE_AJAX'): template_ajax = settings.WAGTAILSEARCH_RESULTS_TEMPLATE_AJAX else: template_ajax = template # Get query string and page from GET paramters query_string = request.GET.get('q', '') page = request.GET.get('page', request.GET.get('p', 1)) # Search if query_string != '': search_results = models.Page.search( query_string, show_unpublished=show_unpublished, search_title_only=search_title_only, extra_filters=extra_filters, path=path if path else request.site.root_page.path ) # Get query object query = Query.get(query_string) # Add hit query.add_hit() # Pagination paginator = Paginator(search_results, results_per_page) try: search_results = paginator.page(page) except PageNotAnInteger: search_results = paginator.page(1) except EmptyPage: search_results = paginator.page(paginator.num_pages) else: query = None search_results = None if use_json: # Return a json response if search_results: search_results_json = [] for result in search_results: result_specific = result.specific search_results_json.append(dict( (attr, getattr(result_specific, attr)) for attr in json_attrs if hasattr(result_specific, attr) )) return JsonResponse(search_results_json) else: return JsonResponse([], safe=False) else: # Render a template if request.is_ajax() and template_ajax: template = template_ajax return render(request, template, dict( query_string=query_string, search_results=search_results, is_ajax=request.is_ajax(), query=query ))