+*.egg-info
*.pyc
+build
dist
-*.egg-info
include LICENSE.txt
include CONTRIBUTORS.txt
recursive-include docs *
-recursive-include pagination/templates/pagination *.html
\ No newline at end of file
+recursive-include pagination/templates/pagination *.html
+recursive-include pagination/locale *
\ No newline at end of file
That's it! You have now paginated ``object_list`` and given users of the site
a way to navigate between the different pages--all without touching your views.
+Custom pagination templates
+---------------------------
+
+In order to override the default pagination template, declare a context variable
+named ``pagination_template`` set to the template name::
+
+ {% with 'pagination/blog/post.html' as pagination_template %}
+ {% autopaginate posts pagesize %}
+ {% paginate %}
+ {% endwith %}
+
+The default pagination template is contained in the ``pagination/default.html``
+file inside the distribution.
A Note About Uploads
--------------------
``PAGINATION_INVALID_PAGE_RAISES_404``
Determines whether an invalid page raises an ``Http404`` or just sets the
``invalid_page`` context variable. ``True`` does the former and ``False``
- does the latter.
\ No newline at end of file
+ does the latter.
+
+``DISPLAY_PAGE_LINKS``
+ If set to ``False``, links for single pages will not be displayed.
+
+``PREVIOUS_LINK_DECORATOR``
+ An HTML prefix for the previous page link; the default value is ``‹‹ ``.
+
+``NEXT_LINK_DECORATOR``
+ An HTML postfix for the next page link; the default value is `` ››``.
+
+``DISPLAY_DISABLED_PREVIOUS_LINK``
+ If set to ``False``, the previous page link will not be displayed if there's
+ no previous page.
+
+``DISPLAY_DISABLED_NEXT_LINK``
+ If set to ``False``, the next page link will not be displayed if there's no
+ next page.
--- /dev/null
+# django-pagination Italian translation
+# Copyright (C) 2010 Fabio Corneti <info@corneti.com>
+# This file is distributed under the same license as the django-pagination package.
+# Fabio Corneti <info@corneti.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-22 12:04+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: templates/pagination/default.html:6 templates/pagination/default.html:9
+msgid "previous"
+msgstr "precedenti"
+
+#: templates/pagination/default.html:30 templates/pagination/default.html:33
+msgid "next"
+msgstr "successive"
--- /dev/null
+{% if is_paginated %}
+{% load i18n %}
+<div class="pagination">
+ {% block previouslink %}
+ {% if page_obj.has_previous %}
+ <a href="?page{{ page_suffix }}={{ page_obj.previous_page_number }}{{ getvars }}" class="prev">{{ previous_link_decorator|safe }}{% trans "previous" %}</a>
+ {% else %}
+ {% if display_disabled_previous_link %}
+ <span class="disabled prev">{{ previous_link_decorator|safe }}{% trans "previous" %}</span>
+ {% endif %}
+ {% endif %}
+ {% endblock previouslink %}
+ {% block pagelinks %}
+ {% if display_page_links %}
+ {% for page in pages %}
+ {% if page %}
+ {% ifequal page page_obj.number %}
+ <span class="current page">{{ page }}</span>
+ {% else %}
+ <a href="?page{{ page_suffix }}={{ page }}{{ getvars }}" class="page">{{ page }}</a>
+ {% endifequal %}
+ {% else %}
+ ...
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ {% endblock pagelinks %}
+ {% block nextlink %}
+ {% if page_obj.has_next %}
+ <a href="?page{{ page_suffix }}={{ page_obj.next_page_number }}{{ getvars }}" class="next">{% trans "next" %}{{ next_link_decorator|safe }}</a>
+ {% else %}
+ {% if display_disabled_next_link %}
+ <span class="disabled next">{% trans "next" %}{{ next_link_decorator|safe }}</span>
+ {% endif %}
+ {% endif %}
+ {% endblock nextlink %}
+</div>
+{% endif %}
-{% if is_paginated %}
-{% load i18n %}
-<div class="pagination">
- {% if page_obj.has_previous %}
- <a href="?page{{ page_suffix }}={{ page_obj.previous_page_number }}{{ getvars }}" class="prev">‹‹ {% trans "previous" %}</a>
- {% else %}
- <span class="disabled prev">‹‹ {% trans "previous" %}</span>
- {% endif %}
- {% for page in pages %}
- {% if page %}
- {% ifequal page page_obj.number %}
- <span class="current page">{{ page }}</span>
- {% else %}
- <a href="?page{{ page_suffix }}={{ page }}{{ getvars }}" class="page">{{ page }}</a>
- {% endifequal %}
- {% else %}
- ...
- {% endif %}
- {% endfor %}
- {% if page_obj.has_next %}
- <a href="?page{{ page_suffix }}={{ page_obj.next_page_number }}{{ getvars }}" class="next">{% trans "next" %} ››</a>
- {% else %}
- <span class="disabled next">{% trans "next" %} ››</span>
- {% endif %}
-</div>
-{% endif %}
+{% include pagination_template %}
DEFAULT_ORPHANS = getattr(settings, 'PAGINATION_DEFAULT_ORPHANS', 0)
INVALID_PAGE_RAISES_404 = getattr(settings,
'PAGINATION_INVALID_PAGE_RAISES_404', False)
+DISPLAY_PAGE_LINKS = getattr(settings, 'PAGINATION_DISPLAY_PAGE_LINKS', True)
+PREVIOUS_LINK_DECORATOR = getattr(settings, 'PAGINATION_PREVIOUS_LINK_DECORATOR', "‹‹ ")
+NEXT_LINK_DECORATOR = getattr(settings, 'PAGINATION_NEXT_LINK_DECORATOR', " ››")
+DISPLAY_DISABLED_PREVIOUS_LINK = getattr(settings, 'PAGINATION_DISPLAY_DISABLED_PREVIOUS_LINK', False)
+DISPLAY_DISABLED_NEXT_LINK = getattr(settings, 'PAGINATION_DISPLAY_DISABLED_NEXT_LINK', False)
def do_autopaginate(parser, token):
"""
A dictionary of all of the **GET** parameters in the current request.
This is useful to maintain certain types of state, even when requesting
a different page.
- """
+
+ ``pagination_template``
+ A custom template to include in place of the default ``pagination.html``
+ contents.
+
+ """
try:
paginator = context['paginator']
page_obj = context['page_obj']
page_suffix = context.get('page_suffix', '')
page_range = paginator.page_range
+ pagination_template = context.get('pagination_template', 'pagination/default.html')
+ # Calculate the record range in the current page for display.
+ records = {'first': 1 + (page_obj.number - 1) * paginator.per_page}
+ records['last'] = records['first'] + paginator.per_page - 1
+ if records['last'] + paginator.orphans >= paginator.count:
+ records['last'] = paginator.count
# First and last are simply the first *n* pages and the last *n* pages,
# where *n* is the current window size.
first = set(page_range[:window])
'paginator': paginator,
'is_paginated': paginator.count > paginator.per_page,
'page_suffix': page_suffix,
+ 'display_page_links': DISPLAY_PAGE_LINKS,
+ 'display_disabled_previous_link': DISPLAY_DISABLED_PREVIOUS_LINK,
+ 'display_disabled_next_link': DISPLAY_DISABLED_NEXT_LINK,
+ 'previous_link_decorator': PREVIOUS_LINK_DECORATOR,
+ 'next_link_decorator': NEXT_LINK_DECORATOR,
+ 'pagination_template': pagination_template,
}
if 'request' in context:
getvars = context['request'].GET.copy()
>>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages']
[1, 2, 3, 4, None, 7, 8, 9, 10]
+>>> p = Paginator(range(21), 2, 1)
+>>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages']
+[1, 2, 3, 4, None, 7, 8, 9, 10]
+
>>> t = Template("{% load pagination_tags %}{% autopaginate var 2 %}{% paginate %}")
>>> from django.http import HttpRequest as DjangoHttpRequest