diff options
Diffstat (limited to 'chimere/views.py')
-rw-r--r-- | chimere/views.py | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/chimere/views.py b/chimere/views.py index ee27d26..d486506 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -1278,23 +1278,51 @@ class SearchView(FormView): form_class = forms.SearchForm results_per_page = settings.SEARCH_RESULTS_PER_PAGE - def get_results(self, query, area=None): - results = [] + def get_results(self, query, area=None, page=1): + results, has_next = [], False + start = (page - 1) * self.results_per_page + end = page * self.results_per_page - 1 for model in [models.Marker, models.Route, models.Polygon]: - results += model.search(query, area=area, get_json=True) - return results + if len(results) > end - len(results): + continue + res, _has_next = model.search( + query, area=area, get_json=True, + slice=[start, end], + check_next=True) + if _has_next: + has_next = True + if res: + if start: + end = end - start + start = 0 + end -= len(res) + results += res + return results, has_next def get_context_data(self, **kwargs): context = super(SearchView, self).get_context_data(**kwargs) area, area_name = get_area(self.kwargs.get('area_name', None)) query, results = None, [] + previous_page_number, next_page_number = None, None if "q" in self.request.GET: query = self.request.GET['q'] - results = self.get_results(query, area) + try: + page = int(self.request.GET.get('page', 1)) + assert page >= 1 + except (ValueError, AssertionError): + page = 1 + if page > 1: + previous_page_number = page - 1 + results, has_next = self.get_results(query, area, page=page) + if has_next: + next_page_number = page + 1 + context.update({ 'query': query, 'results': results, - 'area_name': area_name + 'area_name': area_name, + 'previous_page_number': previous_page_number, + 'next_page_number': next_page_number }) # (paginator, page) = self.build_page() |