Django

Code

Changeset 7307

Show
Ignore:
Timestamp:
03/18/08 16:40:45 (5 months ago)
Author:
adrian
Message:

Changed list_detail.object_list generic view to use the new Paginator class. This is backwards-compatible -- the previous 12 template context variables (has_next, has_previous, etc.) are still passed to the template, but new templates should only access the new template variables 'paginator' and 'page_obj'

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/views/generic/list_detail.py

    r6833 r7307  
    22from django.http import Http404, HttpResponse 
    33from django.core.xheaders import populate_xheaders 
    4 from django.core.paginator import ObjectPaginator, InvalidPage 
     4from django.core.paginator import QuerySetPaginator, InvalidPage 
    55from django.core.exceptions import ObjectDoesNotExist 
    66 
     
    4646    queryset = queryset._clone() 
    4747    if paginate_by: 
    48         paginator = ObjectPaginator(queryset, paginate_by) 
     48        paginator = QuerySetPaginator(queryset, paginate_by, allow_empty_first_page=allow_empty) 
    4949        if not page: 
    5050            page = request.GET.get('page', 1) 
     
    5353        except ValueError: 
    5454            if page == 'last': 
    55                 page_number = paginator.pages 
     55                page_number = paginator.num_pages 
    5656            else: 
    57                 # Page is not 'last', nor can it be converted to an int 
     57                # Page is not 'last', nor can it be converted to an int. 
    5858                raise Http404 
    5959        try: 
    60             object_list = paginator.get_page(page_number - 1
     60            page_obj = paginator.page(page_number
    6161        except InvalidPage: 
    62             if page_number == 1 and allow_empty: 
    63                 object_list = [] 
    64             else: 
    65                 raise Http404 
     62            raise Http404 
    6663        c = RequestContext(request, { 
    67             '%s_list' % template_object_name: object_list, 
    68             'is_paginated': paginator.pages > 1, 
    69             'results_per_page': paginate_by, 
    70             'has_next': paginator.has_next_page(page_number - 1), 
    71             'has_previous': paginator.has_previous_page(page_number - 1), 
    72             'page': page_number, 
    73             'next': page_number + 1, 
    74             'previous': page_number - 1, 
    75             'last_on_page': paginator.last_on_page(page_number - 1), 
    76             'first_on_page': paginator.first_on_page(page_number - 1), 
    77             'pages': paginator.pages, 
    78             'hits' : paginator.hits, 
    79             'page_range' : paginator.page_range 
     64            '%s_list' % template_object_name: page_obj.object_list, 
     65            'paginator': paginator, 
     66            'page_obj': page_obj, 
     67 
     68            # Legacy template context stuff. New templates should use page_obj 
     69            # to access this instead. 
     70            'is_paginated': page_obj.has_other_pages(), 
     71            'results_per_page': paginator.per_page, 
     72            'has_next': page_obj.has_next(), 
     73            'has_previous': page_obj.has_previous(), 
     74            'page': page_obj.number, 
     75            'next': page_obj.next_page_number(), 
     76            'previous': page_obj.previous_page_number(), 
     77            'last_on_page': page_obj.start_index(), 
     78            'first_on_page': page_obj.end_index(), 
     79            'pages': paginator.num_pages, 
     80            'hits': paginator.count, 
     81            'page_range': paginator.page_range, 
    8082        }, context_processors) 
    8183    else: 
    8284        c = RequestContext(request, { 
    8385            '%s_list' % template_object_name: queryset, 
    84             'is_paginated': False 
     86            'paginator': None, 
     87            'page_obj': None, 
     88            'is_paginated': False, 
    8589        }, context_processors) 
    8690        if not allow_empty and len(queryset) == 0: