Skip to content

Commit 3dbe515

Browse files
author
yangxueguang
committed
完善了分页的显示逻辑
1 parent ad2e893 commit 3dbe515

File tree

2 files changed

+50
-9
lines changed

2 files changed

+50
-9
lines changed

blog/templates/blog/pagination.html

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,34 @@
55
</a>
66
{% endif %}
77

8+
{% if first_page == current_page %}
9+
<span class="first-page current">1</span>
10+
{% else %}
11+
<a href="?page=1" class="first-page">1</a>
12+
{% endif %}
13+
14+
{% if pages_first > 2 %}
15+
<span>...</span>
16+
{% endif %}
17+
818
{% for page in pages %}
9-
{% if page == 1 %}
10-
{% if page == current_page %}
11-
<span class="first-page current">{{ page }}</span>
12-
{% else %}
13-
<a href="?page={{ page }}" class="first-page">{{ page }}</a>
14-
{% endif %}
15-
{% elif page == current_page %}
19+
{% if page == current_page %}
1620
<span class="current">{{ page }}</span>
1721
{% else %}
1822
<a href="?page={{ page }}">{{ page }}</a>
1923
{% endif %}
2024
{% endfor %}
2125

26+
{% if pages_last < last_page %}
27+
<span>...</span>
28+
{% endif %}
29+
30+
{% if last_page == current_page %}
31+
<span class="current">{{ last_page }}</span>
32+
{% else %}
33+
<a href="?page={{ last_page }}">{{ last_page }}</a>
34+
{% endif %}
35+
2236
{% if article_list.has_next %}
2337
<a class="next-page" href="?page={{ article_list.next_page_number }}">
2438
下一页<span class="icon-next"></span>

blog/templatetags/paginate_tags.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,49 @@
66

77
@register.simple_tag(takes_context=True)
88
def paginate(context, object_list, page_count):
9+
left = 3
10+
right = 3
11+
912
paginator = Paginator(object_list, page_count)
1013
page = context['request'].GET.get('page')
11-
pages = [i + 1 for i in range(paginator.num_pages)]
1214

1315
try:
1416
object_list = paginator.page(page)
1517
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)
1620
except PageNotAnInteger:
1721
object_list = paginator.page(1)
1822
context['current_page'] = 1
23+
pages = get_right(context['current_page'], right, paginator.num_pages)
1924
except EmptyPage:
2025
object_list = paginator.page(paginator.num_pages)
2126
context['current_page'] = paginator.num_pages
27+
pages = get_left(context['current_page'], left, paginator.num_pages)
2228

2329
context['article_list'] = object_list
24-
context['paginator'] = paginator
2530
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
2635

2736
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

Comments
 (0)