原创不易,转载请说明出处!
用Django实现分页功能:
1.若总页数<10,则显示所有页面,如下:
2.若页数大于10,则只显示10页,如下:
3.html代码
{# 分页效果 #}
{# 如果只有一页的情况下 #}
{# {{ current_page.paginator.num_pages }}#}
{# {{ current_page.paginator.count }}#}
{% ifequal current_page.paginator.num_pages 1 %}
<span><a href="?page=1">1</a></span>
{% endifequal %}
{# 页数少于10页的情况下 #}
{% if current_page.paginator.num_pages <= 10 %}
{% if current_page.has_previous %}
<span id="prev"><a href="?page={{ current_page.previous_page_number }}">上一页</a></span>
{% endif %}
{% for i in current_page.paginator.page_range %}
{% if current_page.number == i %}
<span>{{ current_page.number }}</span>
{% else %}
<span><a href="?page={{ i }}" id = "id{{ i}}"onclick="f({{ i}})">{{ i }}</a></span>
{% endif %}
{% endfor %}
{% if current_page.has_next %}
<span id="next"><a href="?page={{ current_page.next_page_number }}">下一页</a></span>
{% endif %}
{% endif %}
{# 页数大于10页的情况下#}
{% if current_page.paginator.num_pages > 10 %}
{% if current_page.has_previous %}
<span id="prev"><a href="?page={{ current_page.previous_page_number }}">上一页</a></span>
{% endif %}
{% for i in mypages %}
{% if current_page.number == i %}
<span>{{ current_page.number }}</span>
{% else %}
<span><a href="?page={{ i }}" >{{ i }}</a></span>
{% endif %}
{% endfor %}
{% if current_page.has_next %}
<span id="next"><a href="?page={{ current_page.next_page_number }}">下一页</a></span>
{% endif %}
{% endif %}
4.在views层传入相应的页码数即可
def paginator_view(request):
request.encoding = 'utf-8'
user_lists=Users.objects.all()
user_list=[]
mypages=[]
for user in user_lists:
user_list.append(user)
paginator=Paginator(user_list,5)
if request.method=='GET':
page=request.GET.get('page')
try:
current_page=paginator.page(page)
size = 10
i=current_page.number
while i>0:
mypages.append(i)
size-=1
if(size==5):
break
i-=1
mypages.reverse()
i = current_page.number+1
while i<=current_page.paginator.num_pages:
mypages.append(i)
size -= 1
if(size==0):
break
i+=1
i = current_page.number-5;
if(size>0):
while(i>0):
mypages.append(i)
size -= 1
i-=1
if(size==0):
break
mypages.sort()
except PageNotAnInteger:
current_page=paginator.page(1)
except InvalidPage:
return HttpResponse('找不到页面的内容')
except EmptyPage:
current_page=paginator.page(paginator.num_pages)
return render(request,'page.html',{'current_page':current_page,'mypages':mypages})