|
6 | 6 |
|
7 | 7 | @register.simple_tag(takes_context=True)
|
8 | 8 | def paginate(context, object_list, page_count):
|
| 9 | + left = 3 |
| 10 | + right = 3 |
| 11 | + |
9 | 12 | paginator = Paginator(object_list, page_count)
|
10 | 13 | page = context['request'].GET.get('page')
|
11 |
| - pages = [i + 1 for i in range(paginator.num_pages)] |
12 | 14 |
|
13 | 15 | try:
|
14 | 16 | object_list = paginator.page(page)
|
15 | 17 | context['current_page'] = int(page)
|
| 18 | + pages = get_left(context['current_page'], left, paginator.num_pages) + get_right(context['current_page'], right, |
| 19 | + paginator.num_pages) |
16 | 20 | except PageNotAnInteger:
|
17 | 21 | object_list = paginator.page(1)
|
18 | 22 | context['current_page'] = 1
|
| 23 | + pages = get_right(context['current_page'], right, paginator.num_pages) |
19 | 24 | except EmptyPage:
|
20 | 25 | object_list = paginator.page(paginator.num_pages)
|
21 | 26 | context['current_page'] = paginator.num_pages
|
| 27 | + pages = get_left(context['current_page'], left, paginator.num_pages) |
22 | 28 |
|
23 | 29 | context['article_list'] = object_list
|
24 |
| - context['paginator'] = paginator |
25 | 30 | context['pages'] = pages
|
| 31 | + context['last_page'] = paginator.num_pages |
| 32 | + context['first_page'] = 1 |
| 33 | + context['pages_first'] = pages[0] |
| 34 | + context['pages_last'] = pages[-1] + 1 |
26 | 35 |
|
27 | 36 | return '' # 必须加这个,否则首页会显示个None
|
| 37 | + |
| 38 | + |
| 39 | +def get_left(current_page, left, num_pages): |
| 40 | + if current_page == 1: |
| 41 | + return [] |
| 42 | + elif current_page == num_pages: |
| 43 | + l = [i - 1 for i in range(current_page, current_page - left, -1) if i - 1 > 1] |
| 44 | + l.sort() |
| 45 | + return l |
| 46 | + l = [i for i in range(current_page, current_page - left, -1) if i > 1] |
| 47 | + l.sort() |
| 48 | + return l |
| 49 | + |
| 50 | + |
| 51 | +def get_right(current_page, right, num_pages): |
| 52 | + if current_page == num_pages: |
| 53 | + return [] |
| 54 | + return [i + 1 for i in range(current_page, current_page + right - 1) if i < num_pages - 1] |
0 commit comments