|
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