summaryrefslogtreecommitdiff
path: root/chimere/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/views.py')
-rw-r--r--chimere/views.py40
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()