def index(self, request): """The view for showing all the results in the Haystack index. Emulates the standard Django ChangeList mostly. :param request: the current request. :type request: WSGIRequest :return: A template rendered into an HttpReponse """ page_var = self.get_paginator_var(request) form = PreSelectedModelSearchForm(request.GET or None, load_all=False) # Make sure there are some models indexed available_models = model_choices() if len(available_models) < 0: raise Http404 # We've not selected any models, so we're going to redirect and select # all of them. This will bite me in the ass if someone searches for a string # but no models, but I don't know WTF they'd expect to return, anyway. # Note that I'm only doing this to sidestep this issue: # https://gist.github.com/3766607 if 'models' not in request.GET.keys(): # TODO: make this betterererer. new_qs = ['&models=%s' % x[0] for x in available_models] # if we're in haystack2, we probably want to provide the 'default' # connection so that it behaves as if "initial" were in place. if form.has_multiple_connections(): new_qs.append('&connection=' + form.fields['connection'].initial) new_qs = ''.join(new_qs) qs = self.get_current_query_string(request, remove=['p']) return HttpResponseRedirect(request.path_info + qs + new_qs) try: sqs = form.search() try: page_no = int(request.GET.get(PAGE_VAR, 0)) except ValueError: page_no = 0 #page_no = int(request.GET.get(page_var, 1)) results_per_page = self.get_results_per_page(request) paginator = Paginator(sqs, results_per_page) page = paginator.page(page_no+1) except (InvalidPage, ValueError): # paginator.page may raise InvalidPage if we've gone too far # meanwhile, casting the querystring parameter may raise ValueError # if it's None, or '', or other silly input. raise Http404 query = request.GET.get(self.get_search_var(request), None) connection = request.GET.get('connection', None) title = self.model._meta.verbose_name_plural if query: title = string_concat(self.model._meta.verbose_name_plural, ' for "', query, '"') if connection: title = string_concat(title, ' using "', connection, '" connection') context = { 'results': self.get_wrapped_search_results(page.object_list), 'pagination_required': page.has_other_pages(), 'page_range': paginator.page_range, 'page_num': page.number, 'result_count': paginator.count, 'opts': self.model._meta, 'title': force_unicode(title), 'root_path': getattr(self.admin_site, 'root_path', None), 'app_label': self.model._meta.app_label, 'filtered': True, 'form': form, 'query_string': self.get_current_query_string(request, remove=['p']), 'search_model_count': len(request.GET.getlist('models')), 'search_facet_count': len(request.GET.getlist('possible_facets')), 'search_var': self.get_search_var(request), 'page_var': page_var, 'facets': FacetWrapper(sqs.facet_counts()), 'module_name': force_unicode(self.model._meta.verbose_name_plural), 'cl': FakeChangeListForPaginator(request, page, results_per_page, self.model._meta), 'haystack_version': _haystack_version, # Note: the empty Media object isn't specficially required for the # standard Django admin, but is apparently a pre-requisite for # things like Grappelli. # See #1 (https://github.com/kezabelle/django-haystackbrowser/pull/1) 'media': Media() } return render_to_response('admin/haystackbrowser/result_list.html', context, context_instance=RequestContext(request))
def index(self, request): """The view for showing all the results in the Haystack index. Emulates the standard Django ChangeList mostly. :param request: the current request. :type request: WSGIRequest :return: A template rendered into an HttpReponse """ if not self.has_change_permission(request, None): raise PermissionDenied("Not a superuser") page_var = self.get_paginator_var(request) form = PreSelectedModelSearchForm(request.GET or None, load_all=False) minimum_page = form.fields[page_var].min_value # Make sure there are some models indexed available_models = model_choices() if len(available_models) <= 0: raise Search404('No search indexes bound via Haystack') # We've not selected any models, so we're going to redirect and select # all of them. This will bite me in the ass if someone searches for a string # but no models, but I don't know WTF they'd expect to return, anyway. # Note that I'm only doing this to sidestep this issue: # https://gist.github.com/3766607 if 'models' not in request.GET.keys(): # TODO: make this betterererer. new_qs = ['&models=%s' % x[0] for x in available_models] # if we're in haystack2, we probably want to provide the 'default' # connection so that it behaves as if "initial" were in place. if form.has_multiple_connections(): new_qs.append('&connection=' + form.fields['connection'].initial) new_qs = ''.join(new_qs) existing_query = request.GET.copy() if page_var in existing_query: existing_query.pop(page_var) existing_query[page_var] = minimum_page location = '%(path)s?%(existing_qs)s%(new_qs)s' % { 'existing_qs': existing_query.urlencode(), 'new_qs': new_qs, 'path': request.path_info, } return HttpResponseRedirect(location) sqs = form.search() cleaned_GET = form.cleaned_data_querydict try: page_no = int(cleaned_GET.get(PAGE_VAR, minimum_page)) except ValueError: page_no = minimum_page results_per_page = self.get_results_per_page(request) paginator = Paginator(sqs, results_per_page) try: page = paginator.page(page_no + 1) except (InvalidPage, ValueError): # paginator.page may raise InvalidPage if we've gone too far # meanwhile, casting the querystring parameter may raise ValueError # if it's None, or '', or other silly input. raise Search404("Invalid page") query = request.GET.get(self.get_search_var(request), None) connection = request.GET.get('connection', None) title = self.model._meta.verbose_name_plural wrapped_facets = FacetWrapper( sqs.facet_counts(), querydict=form.cleaned_data_querydict.copy()) context = { 'results': self.get_wrapped_search_results(page.object_list), 'pagination_required': page.has_other_pages(), # this may be expanded into xrange(*page_range) to copy what # the paginator would yield. This prevents 50000+ pages making # the page slow to render because of django-debug-toolbar. 'page_range': (1, paginator.num_pages + 1), 'page_num': page.number, 'result_count': paginator.count, 'opts': self.model._meta, 'title': force_text(title), 'root_path': getattr(self.admin_site, 'root_path', None), 'app_label': self.model._meta.app_label, 'filtered': True, 'form': form, 'form_valid': form.is_valid(), 'query_string': self.get_current_query_string(request, remove=[page_var]), 'search_model_count': len(cleaned_GET.getlist('models')), 'search_facet_count': len(cleaned_GET.getlist('possible_facets')), 'search_var': self.get_search_var(request), 'page_var': page_var, 'facets': wrapped_facets, 'applied_facets': form.applied_facets(), 'module_name': force_text(self.model._meta.verbose_name_plural), 'cl': FakeChangeListForPaginator(request, page, results_per_page, self.model._meta), 'haystack_version': _haystack_version, # Note: the empty Media object isn't specficially required for the # standard Django admin, but is apparently a pre-requisite for # things like Grappelli. # See #1 (https://github.com/kezabelle/django-haystackbrowser/pull/1) 'media': Media() } # Update the context with variables that should be available to every page context.update(self.each_context_compat(request)) return self.do_render( request=request, template_name='admin/haystackbrowser/result_list.html', context=context)
def index(self, request): """The view for showing all the results in the Haystack index. Emulates the standard Django ChangeList mostly. :param request: the current request. :type request: WSGIRequest :return: A template rendered into an HttpReponse """ if not self.has_change_permission(request, None): raise PermissionDenied("Not a superuser") page_var = self.get_paginator_var(request) form = PreSelectedModelSearchForm(request.GET or None, load_all=False) minimum_page = form.fields[page_var].min_value # Make sure there are some models indexed available_models = model_choices() if len(available_models) <= 0: raise Search404('No search indexes bound via Haystack') # We've not selected any models, so we're going to redirect and select # all of them. This will bite me in the ass if someone searches for a string # but no models, but I don't know WTF they'd expect to return, anyway. # Note that I'm only doing this to sidestep this issue: # https://gist.github.com/3766607 if 'models' not in request.GET.keys(): # TODO: make this betterererer. new_qs = ['&models=%s' % x[0] for x in available_models] # if we're in haystack2, we probably want to provide the 'default' # connection so that it behaves as if "initial" were in place. if form.has_multiple_connections(): new_qs.append('&connection=' + form.fields['connection'].initial) new_qs = ''.join(new_qs) existing_query = request.GET.copy() if page_var in existing_query: existing_query.pop(page_var) existing_query[page_var] = minimum_page location = '%(path)s?%(existing_qs)s%(new_qs)s' % { 'existing_qs': existing_query.urlencode(), 'new_qs': new_qs, 'path': request.path_info, } return HttpResponseRedirect(location) sqs = form.search() cleaned_GET = form.cleaned_data_querydict try: page_no = int(cleaned_GET.get(PAGE_VAR, minimum_page)) except ValueError: page_no = minimum_page results_per_page = self.get_results_per_page(request) paginator = Paginator(sqs, results_per_page) try: page = paginator.page(page_no+1) except (InvalidPage, ValueError): # paginator.page may raise InvalidPage if we've gone too far # meanwhile, casting the querystring parameter may raise ValueError # if it's None, or '', or other silly input. raise Search404("Invalid page") query = request.GET.get(self.get_search_var(request), None) connection = request.GET.get('connection', None) title = self.model._meta.verbose_name_plural wrapped_facets = FacetWrapper( sqs.facet_counts(), querydict=form.cleaned_data_querydict.copy()) context = { 'results': self.get_wrapped_search_results(page.object_list), 'pagination_required': page.has_other_pages(), # this may be expanded into xrange(*page_range) to copy what # the paginator would yield. This prevents 50000+ pages making # the page slow to render because of django-debug-toolbar. 'page_range': (1, paginator.num_pages + 1), 'page_num': page.number, 'result_count': paginator.count, 'opts': self.model._meta, 'title': force_text(title), 'root_path': getattr(self.admin_site, 'root_path', None), 'app_label': self.model._meta.app_label, 'filtered': True, 'form': form, 'form_valid': form.is_valid(), 'query_string': self.get_current_query_string(request, remove=[page_var]), 'search_model_count': len(cleaned_GET.getlist('models')), 'search_facet_count': len(cleaned_GET.getlist('possible_facets')), 'search_var': self.get_search_var(request), 'page_var': page_var, 'facets': wrapped_facets, 'applied_facets': form.applied_facets(), 'module_name': force_text(self.model._meta.verbose_name_plural), 'cl': FakeChangeListForPaginator(request, page, results_per_page, self.model._meta), 'haystack_version': _haystack_version, # Note: the empty Media object isn't specficially required for the # standard Django admin, but is apparently a pre-requisite for # things like Grappelli. # See #1 (https://github.com/kezabelle/django-haystackbrowser/pull/1) 'media': Media() } return self.do_render(request=request, template_name='admin/haystackbrowser/result_list.html', context=context)
def index(self, request): """The view for showing all the results in the Haystack index. Emulates the standard Django ChangeList mostly. :param request: the current request. :type request: WSGIRequest :return: A template rendered into an HttpReponse """ page_var = self.get_paginator_var(request) form = PreSelectedModelSearchForm(request.GET or None, load_all=False) # Make sure there are some models indexed available_models = model_choices() if len(available_models) < 0: raise Http404 # We've not selected any models, so we're going to redirect and select # all of them. This will bite me in the ass if someone searches for a string # but no models, but I don't know WTF they'd expect to return, anyway. # Note that I'm only doing this to sidestep this issue: # https://gist.github.com/3766607 if 'models' not in request.GET.keys(): # TODO: make this betterererer. new_qs = ['&models=%s' % x[0] for x in available_models] # if we're in haystack2, we probably want to provide the 'default' # connection so that it behaves as if "initial" were in place. if form.has_multiple_connections(): new_qs.append('&connection=' + form.fields['connection'].initial) new_qs = ''.join(new_qs) qs = self.get_current_query_string(request, remove=['p']) return HttpResponseRedirect(request.path_info + qs + new_qs) try: sqs = form.search() try: page_no = int(request.GET.get(PAGE_VAR, 0)) except ValueError: page_no = 0 #page_no = int(request.GET.get(page_var, 1)) results_per_page = self.get_results_per_page(request) paginator = Paginator(sqs, results_per_page) page = paginator.page(page_no + 1) except (InvalidPage, ValueError): # paginator.page may raise InvalidPage if we've gone too far # meanwhile, casting the querystring parameter may raise ValueError # if it's None, or '', or other silly input. raise Http404 query = request.GET.get(self.get_search_var(request), None) connection = request.GET.get('connection', None) title = self.model._meta.verbose_name_plural if query: title = string_concat(self.model._meta.verbose_name_plural, ' for "', query, '"') if connection: title = string_concat(title, ' using "', connection, '" connection') context = { 'results': self.get_wrapped_search_results(page.object_list), 'pagination_required': page.has_other_pages(), 'page_range': paginator.page_range, 'page_num': page.number, 'result_count': paginator.count, 'opts': self.model._meta, 'title': force_unicode(title), 'root_path': getattr(self.admin_site, 'root_path', None), 'app_label': self.model._meta.app_label, 'filtered': True, 'form': form, 'query_string': self.get_current_query_string(request, remove=['p']), 'search_model_count': len(request.GET.getlist('models')), 'search_facet_count': len(request.GET.getlist('possible_facets')), 'search_var': self.get_search_var(request), 'page_var': page_var, 'facets': FacetWrapper(sqs.facet_counts()), 'module_name': force_unicode(self.model._meta.verbose_name_plural), 'cl': FakeChangeListForPaginator(request, page, results_per_page, self.model._meta), 'haystack_version': _haystack_version, # Note: the empty Media object isn't specficially required for the # standard Django admin, but is apparently a pre-requisite for # things like Grappelli. # See #1 (https://github.com/kezabelle/django-haystackbrowser/pull/1) 'media': Media() } return render_to_response('admin/haystackbrowser/result_list.html', context, context_instance=RequestContext(request))
def index(self, request): """The view for showing all the results in the Haystack index. Emulates the standard Django ChangeList mostly. :param request: the current request. :type request: WSGIRequest :return: A template rendered into an HttpReponse """ page_var = self.get_paginator_var(request) form = PreSelectedModelSearchForm(request.GET or None, load_all=False) # Make sure there are some models indexed available_models = model_choices() if len(available_models) <= 0: raise Search404("No search indexes bound via Haystack") # We've not selected any models, so we're going to redirect and select # all of them. This will bite me in the ass if someone searches for a string # but no models, but I don't know WTF they'd expect to return, anyway. # Note that I'm only doing this to sidestep this issue: # https://gist.github.com/3766607 if "models" not in request.GET.keys(): # TODO: make this betterererer. new_qs = ["&models=%s" % x[0] for x in available_models] # if we're in haystack2, we probably want to provide the 'default' # connection so that it behaves as if "initial" were in place. if form.has_multiple_connections(): new_qs.append("&connection=" + form.fields["connection"].initial) new_qs = "".join(new_qs) qs = self.get_current_query_string(request, remove=["p"]) return HttpResponseRedirect(request.path_info + qs + new_qs) try: sqs = form.search() try: page_no = int(request.GET.get(PAGE_VAR, 0)) except ValueError: page_no = 0 # page_no = int(request.GET.get(page_var, 1)) results_per_page = self.get_results_per_page(request) paginator = Paginator(sqs, results_per_page) page = paginator.page(page_no + 1) except (InvalidPage, ValueError): # paginator.page may raise InvalidPage if we've gone too far # meanwhile, casting the querystring parameter may raise ValueError # if it's None, or '', or other silly input. raise Search404("Invalid page") query = request.GET.get(self.get_search_var(request), None) connection = request.GET.get("connection", None) title = self.model._meta.verbose_name_plural if query: title = string_concat(self.model._meta.verbose_name_plural, ' for "', query, '"') if connection: title = string_concat(title, ' using "', connection, '" connection') context = { "results": self.get_wrapped_search_results(page.object_list), "pagination_required": page.has_other_pages(), # this may be expanded into xrange(*page_range) to copy what # the paginator would yield. This prevents 50000+ pages making # the page slow to render because of django-debug-toolbar. "page_range": (1, paginator.num_pages + 1), "page_num": page.number, "result_count": paginator.count, "opts": self.model._meta, "title": force_text(title), "root_path": getattr(self.admin_site, "root_path", None), "app_label": self.model._meta.app_label, "filtered": True, "form": form, "query_string": self.get_current_query_string(request, remove=["p"]), "search_model_count": len(request.GET.getlist("models")), "search_facet_count": len(request.GET.getlist("possible_facets")), "search_var": self.get_search_var(request), "page_var": page_var, "facets": FacetWrapper(sqs.facet_counts()), "module_name": force_text(self.model._meta.verbose_name_plural), "cl": FakeChangeListForPaginator(request, page, results_per_page, self.model._meta), "haystack_version": _haystack_version, # Note: the empty Media object isn't specficially required for the # standard Django admin, but is apparently a pre-requisite for # things like Grappelli. # See #1 (https://github.com/kezabelle/django-haystackbrowser/pull/1) "media": Media(), } return render_to_response( "admin/haystackbrowser/result_list.html", context, context_instance=RequestContext(request) )