|
2 | 2 |
|
3 | 3 | import bleach |
4 | 4 | from django.core.exceptions import ObjectDoesNotExist |
5 | | -from django.core.paginator import InvalidPage, Paginator |
6 | 5 | from django.http import Http404, HttpResponse |
7 | 6 | from django.template import loader |
8 | 7 | from django.utils.safestring import mark_safe |
9 | 8 | from markdown import markdown as markdown_func |
10 | 9 |
|
| 10 | +from cab.pagination import Pagination |
| 11 | + |
11 | 12 |
|
12 | 13 | def object_list( |
13 | 14 | request, |
@@ -58,71 +59,32 @@ def object_list( |
58 | 59 | if extra_context is None: |
59 | 60 | extra_context = {} |
60 | 61 | queryset = queryset._clone() |
| 62 | + model = queryset.model |
61 | 63 | if paginate_by: |
62 | | - paginator = Paginator(queryset, paginate_by, allow_empty_first_page=allow_empty) |
63 | | - if not page: |
64 | | - page = request.GET.get("page", 1) |
| 64 | + pagination = Pagination(request, model, queryset, paginate_by) |
| 65 | + object_list = pagination.get_objects() |
65 | 66 |
|
66 | | - if page == "last": |
67 | | - page_number = paginator.num_pages |
68 | | - else: |
69 | | - try: |
70 | | - page_number = int(page) |
71 | | - except ValueError: |
72 | | - # Page is not 'last', nor can it be converted to an int. |
73 | | - raise Http404 |
74 | | - try: |
75 | | - page_obj = paginator.page(page_number) |
76 | | - except InvalidPage: |
77 | | - raise Http404 |
78 | | - try: |
79 | | - next_page = page_obj.next_page_number() |
80 | | - except InvalidPage: |
81 | | - next_page = None |
82 | | - try: |
83 | | - previous_page = page_obj.previous_page_number() |
84 | | - except InvalidPage: |
85 | | - previous_page = None |
86 | | - |
87 | | - c = { |
88 | | - "%s_list" % template_object_name: page_obj.object_list, |
89 | | - "paginator": paginator, |
90 | | - "page_obj": page_obj, |
91 | | - "is_paginated": page_obj.has_other_pages(), |
92 | | - # Legacy template context stuff. New templates should use page_obj |
93 | | - # to access this instead. |
94 | | - "results_per_page": paginator.per_page, |
95 | | - "has_next": page_obj.has_next(), |
96 | | - "has_previous": page_obj.has_previous(), |
97 | | - "page": page_obj.number, |
98 | | - "next": next_page, |
99 | | - "previous": previous_page, |
100 | | - "first_on_page": page_obj.start_index(), |
101 | | - "last_on_page": page_obj.end_index(), |
102 | | - "pages": paginator.num_pages, |
103 | | - "hits": paginator.count, |
104 | | - "page_range": paginator.page_range, |
| 67 | + context = { |
| 68 | + "%s_list" % template_object_name: object_list, |
| 69 | + "pagination": pagination, |
| 70 | + "hits": pagination.result_count, |
105 | 71 | } |
106 | 72 | else: |
107 | | - c = { |
108 | | - "%s_list" % template_object_name: queryset, |
109 | | - "paginator": None, |
110 | | - "page_obj": None, |
111 | | - "is_paginated": False, |
| 73 | + context = { |
| 74 | + "%s_list" % template_object_name: object_list, |
112 | 75 | } |
113 | 76 | if not allow_empty and len(queryset) == 0: |
114 | 77 | raise Http404 |
115 | 78 |
|
116 | 79 | for key, value in extra_context.items(): |
117 | 80 | if callable(value): |
118 | | - c[key] = value() |
| 81 | + context[key] = value() |
119 | 82 | else: |
120 | | - c[key] = value |
| 83 | + context[key] = value |
121 | 84 | if not template_name: |
122 | | - model = queryset.model |
123 | 85 | template_name = "%s/%s_list.html" % (model._meta.app_label, model._meta.object_name.lower()) |
124 | | - t = template_loader.get_template(template_name) |
125 | | - return HttpResponse(t.render(c, request=request), content_type=content_type) |
| 86 | + template = template_loader.get_template(template_name) |
| 87 | + return HttpResponse(template.render(context, request=request), content_type=content_type) |
126 | 88 |
|
127 | 89 |
|
128 | 90 | def object_detail( |
|
0 commit comments