merged patch from flosch for multiple paginators on one page
authorMatt Culbreth <mattc@endgames.us>
Tue, 18 Jan 2011 19:54:46 +0000 (14:54 -0500)
committerMatt Culbreth <mattc@endgames.us>
Tue, 18 Jan 2011 19:54:46 +0000 (14:54 -0500)
1  2 
pagination/templates/pagination/pagination.html
pagination/templatetags/pagination_tags.py
pagination/tests.py

@@@ -2,7 -2,7 +2,7 @@@
  {% load i18n %}
  <div class="pagination">
      {% if page_obj.has_previous %}
-         <a href="?page={{ page_obj.previous_page_number }}{{ getvars }}{{ hashtag }}" class="prev">&lsaquo;&lsaquo; {% trans "previous" %}</a>
 -        <a href="?page{{ page_suffix }}={{ page_obj.previous_page_number }}{{ getvars }}" class="prev">&lsaquo;&lsaquo; {% trans "previous" %}</a>
++        <a href="?page{{ page_suffix }}={{ page_obj.previous_page_number }}{{ getvars }}{{ hashtag }}" class="prev">&lsaquo;&lsaquo; {% trans "previous" %}</a>
      {% else %}
          <span class="disabled prev">&lsaquo;&lsaquo; {% trans "previous" %}</span>
      {% endif %}
              {% ifequal page page_obj.number %}
                  <span class="current page">{{ page }}</span>
              {% else %}
-                 <a href="?page={{ page }}{{ getvars }}{{ hashtag }}" class="page">{{ page }}</a>
 -                <a href="?page{{ page_suffix }}={{ page }}{{ getvars }}" class="page">{{ page }}</a>
++                <a href="?page{{ page_suffix }}={{ page }}{{ getvars }}{{ hashtag }}" class="page">{{ page }}</a>
              {% endifequal %}
          {% else %}
              ...
          {% endif %}
      {% endfor %}
      {% if page_obj.has_next %}
-         <a href="?page={{ page_obj.next_page_number }}{{ getvars }}{{ hashtag }}" class="next">{% trans "next" %} &rsaquo;&rsaquo;</a>
 -        <a href="?page{{ page_suffix }}={{ page_obj.next_page_number }}{{ getvars }}" class="next">{% trans "next" %} &rsaquo;&rsaquo;</a>
++        <a href="?page{{ page_suffix }}={{ page_obj.next_page_number }}{{ getvars }}{{ hashtag }}" class="next">{% trans "next" %} &rsaquo;&rsaquo;</a>
      {% else %}
          <span class="disabled next">{% trans "next" %} &rsaquo;&rsaquo;</span>
      {% endif %}
@@@ -102,10 -115,10 +115,11 @@@ class AutoPaginateNode(template.Node)
              context[key] = page_obj.object_list
          context['paginator'] = paginator
          context['page_obj'] = page_obj
+         context['page_suffix'] = page_suffix
          return u''
  
 -def paginate(context, window=DEFAULT_WINDOW):
 +
 +def paginate(context, window=DEFAULT_WINDOW, hashtag=''):
      """
      Renders the ``pagination/pagination.html`` template, resulting in a
      Digg-like display of the available pages, given the current page.  If there
      try:
          paginator = context['paginator']
          page_obj = context['page_obj']
+         page_suffix = context.get('page_suffix', '')
          page_range = paginator.page_range
 +        # 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])
              differenced.sort()
              pages.extend(differenced)
          to_return = {
 +            'MEDIA_URL': settings.MEDIA_URL,
              'pages': pages,
 +            'records': records,
              'page_obj': page_obj,
              'paginator': paginator,
 +            'hashtag': hashtag,
              'is_paginated': paginator.count > paginator.per_page,
+             'page_suffix': page_suffix,
          }
          if 'request' in context:
              getvars = context['request'].GET.copy()
  [1, 2]
  
  >>> p = Paginator(range(21), 2, 1)
 ->>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages']
 +>>> pg = paginate({'paginator': p, 'page_obj': p.page(1)})
 +>>> pg['pages']
  [1, 2, 3, 4, None, 7, 8, 9, 10]
 +>>> pg['records']['first']
 +1
 +>>> pg['records']['last']
 +2
 +
 +>>> p = Paginator(range(21), 2, 1)
 +>>> pg = paginate({'paginator': p, 'page_obj': p.page(10)})
 +>>> pg['pages']
 +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 +>>> pg['records']['first']
 +19
 +>>> pg['records']['last']
 +21
  
+ >>> 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