diff --git a/donate/models.py b/donate/models.py index d3bb371c4db03eb0d921a43aafb88a1168a63fee..7313d891482508f93489333ec9ba9983c1a3443e 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 bc2ae1c1eaa9fa51777515d854597ee72c97dd7a..3d44a78e8b6d8acd3efc8af95a758d42551a1cf8 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>