From b5c39d4a36f467f51c8295018ce778a792ae5e47 Mon Sep 17 00:00:00 2001 From: Jarmil <jarmil.halamicek@seznam.cz> Date: Wed, 29 Jul 2020 11:25:30 +0200 Subject: [PATCH] Strankovani projektu ve webu dary. Solves #11 --- donate/models.py | 19 +++++++++-- .../donate/donate_project_index_page.html | 33 ++++++++++++------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/donate/models.py b/donate/models.py index d3bb371c..7313d891 100644 --- a/donate/models.py +++ b/donate/models.py @@ -1,3 +1,4 @@ +from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator from django.db import models from django.shortcuts import redirect from django.utils.translation import gettext_lazy @@ -61,7 +62,7 @@ class DonateFormMixin(models.Model): def get_url(page, dest_page_type): try: return page.get_children().type(dest_page_type).live().first().get_url() - except Page.DoesNotExist: + except (Page.DoesNotExist, AttributeError): return "#" @@ -323,9 +324,21 @@ class DonateProjectIndexPage(Page, SubpageMixin, MetadataPageMixin): def get_context(self, request): context = super().get_context(request) - context["projects"] = ( - self.get_children().live().specific().order_by("-donateprojectpage__date") + + paginator = Paginator( + self.get_children().live().specific().order_by("-donateprojectpage__date"), + 6, ) + + page = request.GET.get("page") + try: + projects = paginator.page(page) + except PageNotAnInteger: + projects = paginator.page(1) + except EmptyPage: + projects = paginator.page(paginator.num_pages) + + context["projects"] = projects return context diff --git a/donate/templates/donate/donate_project_index_page.html b/donate/templates/donate/donate_project_index_page.html index bc2ae1c1..3d44a78e 100644 --- a/donate/templates/donate/donate_project_index_page.html +++ b/donate/templates/donate/donate_project_index_page.html @@ -18,20 +18,31 @@ </div> <!-- /row --> - {% comment %} {# TODO #} - <nav aria-label="Stránkování projektů"> + {% if projects.paginator.num_pages > 1 %} + <nav aria-label="Stránkování aktualit"> <ul class="pagination justify-content-center"> - <li class="page-item active"> - <a class="page-link" href="#">1 <span class="sr-only">(current)</span></a> - </li> - <li class="page-item"><a class="page-link" href="#">2</a></li> - <li class="page-item"><a class="page-link" href="#">3</a></li> - <li class="page-item"> - <a class="page-link" href="#">Další</a> - </li> + + {% if projects.has_previous %} + <li class="page-item"><a class="page-link" href="?page={{ projects.previous_page_number }}">Předchozí</a></li> + {% endif %} + + {% for page_num in projects.paginator.page_range %} + {% if page_num == projects.number %} + <li class="page-item active"> + <a class="page-link" href="#">{{ page_num }} <span class="sr-only">(current)</span></a> + </li> + {% else %} + <li class="page-item"><a class="page-link" href="?page={{ page_num }}">{{ page_num }}</a></li> + {% endif %} + {% endfor %} + + {% if projects.has_next %} + <li class="page-item"><a class="page-link" href="?page={{ projects.next_page_number }}">Další</a></li> + {% endif %} + </ul> </nav> - {% endcomment %} + {% endif %} </div> <!-- /container --> </section> -- GitLab