diff options
author | Étienne Loks <etienne@peacefrogs.net> | 2019-08-22 17:26:16 +0200 |
---|---|---|
committer | Étienne Loks <etienne@peacefrogs.net> | 2019-08-22 17:26:16 +0200 |
commit | a1a02ac4a48bbc0614cc7b588afe1d0932b8e3a1 (patch) | |
tree | f996801e9b99a4cd9de424259e2cda231739a166 | |
parent | c989b2480b48700d709ea6ea6dcb128b06ddf797 (diff) | |
download | ishtar-pergamon-a1a02ac4a48bbc0614cc7b588afe1d0932b8e3a1.tar.bz2 ishtar-pergamon-a1a02ac4a48bbc0614cc7b588afe1d0932b8e3a1.zip |
Manage pagination
-rw-r--r-- | showcase/models.py | 19 | ||||
-rw-r--r-- | showcase/templates/showcase/show_case.html | 45 |
2 files changed, 51 insertions, 13 deletions
diff --git a/showcase/models.py b/showcase/models.py index 1510562..2623c6a 100644 --- a/showcase/models.py +++ b/showcase/models.py @@ -3,6 +3,7 @@ import requests from django.conf import settings from django.core.cache import cache +from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -81,7 +82,6 @@ class ExternalSource(models.Model): @property def data(self): - # TODO: cache return self.get_data() def get_item(self, item_number): @@ -105,3 +105,20 @@ class ShowCase(BasePage): def data(self): return self.external_source.get_data() + def get_context(self, request): + context = super(ShowCase, self).get_context(request) + page = request.GET.get('page', 1) + + paginator = Paginator(self.data, 10) + try: + paginated_data = paginator.page(page) + except PageNotAnInteger: + paginated_data = paginator.page(1) + except EmptyPage: + paginated_data = paginator.page(paginator.num_pages) + + context['paginated_data'] = paginated_data + if paginator.num_pages > 1: + context['paginator'] = paginator + return context + diff --git a/showcase/templates/showcase/show_case.html b/showcase/templates/showcase/show_case.html index 6a2f13b..15bc9c5 100644 --- a/showcase/templates/showcase/show_case.html +++ b/showcase/templates/showcase/show_case.html @@ -26,21 +26,42 @@ {% if page.data %} <div class="row justify-content-md-center"> - {% for item in page.data %} - <div class="col-md-auto m-1" style="width: 12rem;"> + {% for item in paginated_data.object_list %} + <div class="col-md-auto m-1" style="width: 12rem;"> <div class="card"> - {% if item.images.0.thumbnail %} - <img src="{{item.images.0.thumbnail}}" class="card-img-top"> - {% endif %} - <div class="card-body"> - <a href="{% url 'display-item' page.slug forloop.counter0 %}"> - {{item.denomination}} - </a> - </div> - </div> + {% if item.images.0.thumbnail %}<img src="{{item.images.0.thumbnail}}" class="card-img-top">{% endif %} + <div class="card-body"> + {{item.denomination}} + <a class="stretched-link" href="{% url 'display-item' page.slug forloop.counter0 %}"></a> + </div> </div> - {% endfor %} + </div> + {% endfor %} </div> + +{% if paginator %} +<hr> +<nav aria-label="{% trans 'Pagination' %}" class="row justify-content-md-center"> + <ul class="pagination"> + <li class="page-item{% if not paginated_data.has_previous %} disabled{% endif %}"> + <a class="page-link"{% if not paginated_data.has_previous %} tabindex="-1" href="#"{% else %} href="?page={{ paginated_data.previous_page_number }}"{% endif %} aria-label="Next"> + <span aria-hidden="true">«</span> + </a> + </li> + {% for page_number in paginator.page_range %} + <li class="page-item{% if paginated_data.number == page_number %} disabled{% endif %}"> + <a class="page-link" href="?page={{page_number}}">{{page_number}}</a> + </li> + {% endfor %} + <li class="page-item{% if not paginated_data.has_next %} disabled{% endif %}"> + <a class="page-link"{% if not paginated_data.has_next %} tabindex="-1" href="#"{% else %} href="?page={{ paginated_data.next_page_number }}"{% endif %} aria-label="Next"> + <span aria-hidden="true">»</span> + </a> + </li> + </ul> +</nav> +{% endif %} + {% endif %} {% endblock %} |