[buildinfo.debian.net] 14/35: Add paginator utility
Chris Lamb
chris at chris-lamb.co.uk
Thu Nov 3 19:02:24 UTC 2016
This is an automated email from the git hooks/post-receive script.
lamby pushed a commit to branch master
in repository buildinfo.debian.net.
commit bc9f5c4e925445aedd79b6cf6669aed035cb4919
Author: Chris Lamb <lamby at debian.org>
Date: Sun Oct 23 20:48:02 2016 +0200
Add paginator utility
Signed-off-by: Chris Lamb <lamby at debian.org>
---
bidb/settings/defaults/__init__.py | 2 ++
bidb/utils/paginator.py | 30 +++++++++++++++++++++++++++++
bidb/utils/templatetags/__init__.py | 0
bidb/utils/templatetags/pagination.py | 36 +++++++++++++++++++++++++++++++++++
templates/includes/pagination.html | 21 ++++++++++++++++++++
5 files changed, 89 insertions(+)
diff --git a/bidb/settings/defaults/__init__.py b/bidb/settings/defaults/__init__.py
index a4fd21d..78d8366 100644
--- a/bidb/settings/defaults/__init__.py
+++ b/bidb/settings/defaults/__init__.py
@@ -69,6 +69,8 @@ TEMPLATES = [
'builtins': [
'django.contrib.humanize.templatetags.humanize',
'django.contrib.staticfiles.templatetags.staticfiles',
+
+ 'bidb.utils.templatetags.pagination',
],
},
},
diff --git a/bidb/utils/paginator.py b/bidb/utils/paginator.py
new file mode 100644
index 0000000..307e72f
--- /dev/null
+++ b/bidb/utils/paginator.py
@@ -0,0 +1,30 @@
+from django.core.paginator import Paginator, EmptyPage, Page
+
+class AutoPaginator(Paginator):
+ def __init__(self, request, *args, **kwargs):
+ self.request = request
+ self.default = kwargs.pop('default', 1)
+ super(AutoPaginator, self).__init__(*args, **kwargs)
+
+ def current_page(self):
+ try:
+ page = int(self.request.GET['page'])
+
+ if page <= 0:
+ raise ValueError()
+ except (ValueError, KeyError):
+ page = self.default
+
+ try:
+ return self.page(page)
+ except EmptyPage:
+ return Page([], page, self)
+
+ def validate_number(self, number):
+ """
+ Our version ignores EmptyPage.
+ """
+ try:
+ return max(1, int(number))
+ except (TypeError, ValueError):
+ return 1
diff --git a/bidb/utils/templatetags/__init__.py b/bidb/utils/templatetags/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/bidb/utils/templatetags/pagination.py b/bidb/utils/templatetags/pagination.py
new file mode 100644
index 0000000..ec7de6e
--- /dev/null
+++ b/bidb/utils/templatetags/pagination.py
@@ -0,0 +1,36 @@
+from django import template
+
+register = template.Library()
+
+ at register.filter
+def paginator(querydict, page_number):
+ querydict = querydict.copy()
+ querydict['page'] = page_number
+
+ if page_number == 1:
+ querydict.pop('page')
+
+ return querydict.urlencode()
+
+class PaginationNode(template.Node):
+ def __init__(self, page_var, template_file):
+ self.page_var = template.Variable(page_var)
+ self.template_name = template_file
+
+ def render(self, context):
+ # page_var should always be a variable
+ page = self.page_var.resolve(context)
+
+ if not getattr(self, 'nodelist_page', False):
+ t = template.loader.get_template(self.template_name)
+ self.nodelist_page = t.nodelist
+
+ context.push()
+
+ context['page'] = page
+ context['_page_url_maker'] = page.paginator.page_linker
+
+ output = self.nodelist_page.render(context)
+ context.pop()
+
+ return output
diff --git a/templates/includes/pagination.html b/templates/includes/pagination.html
new file mode 100644
index 0000000..9a6df2b
--- /dev/null
+++ b/templates/includes/pagination.html
@@ -0,0 +1,21 @@
+{% if page.has_previous or page.has_next %}
+<ul class="pagination pagination-sm">
+ {% if page.has_previous %}
+ <li><a href="?{{ request.GET|paginator:page.previous_page_number }}">«</a></li>
+ {% else %}
+ <li class="disabled"><a href="#">«</a></li>
+ {% endif %}
+
+ {% for number in page.paginator.page_range %}
+ <li class="{% if page.number == number %}active{% endif %}">
+ <a href="?{{ request.GET|paginator:number }}">{{ number }}</a>
+ </li>
+ {% endfor %}
+
+ {% if page.has_next %}
+ <li><a href="?{{ request.GET|paginator:page.next_page_number }}">»</a></li>
+ {% else %}
+ <li class="disabled"><a href="#">»</a></li>
+ {% endif %}
+</ul>
+{% endif %}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/buildinfo.debian.net.git
More information about the Reproducible-commits
mailing list