先上效果图。亲测成功
views中写一下代码
from django.http import HttpResponse
from django.shortcuts import render
Create your views here.
from django.urls import reverse
from pages.models import UserList
def user_list(request):
#生成50条数据库信息
# for i in range(1, 12):
# dic = {‘username’: ‘name_%d’ % i, ‘age’: i}
# UserList.objects.create(**dic)
# 获取数据库信息
#定义每页条数
each_page_num = 10
#获取当前页面
current_page = request.GET.get('page',1)
#print(current_page)
#将获取的当前页转化为int
current_page = int(current_page)
#定义每页的展示条数
start = (current_page-1)*each_page_num #10 20(current_page-1)*10
end = current_page*each_page_num #20 30 current_page*10
result = UserList.objects.all()[start:end]
#总共应该展示多少页pager_str
all_items = UserList.objects.all().count()
all_page,div= all_items.__divmod__(each_page_num)#获取整数数列及余数
# print(all_page,div)#打印总页数
if div > 0:
all_page +=1
#拼接页码的链接
pager_str = ''
url = reverse('user_list:user_list')
#print(url)
#让页面只显示11个按钮
#1、设置start11,end11。
#2、这样会导致前面和后面超出去。
#3、增加判断条件,
if all_page <=11:
start11 = 1
end11 = all_page+1
else:
if current_page <= 6:
start11 = 1
end11 = 12
else:
start11 = current_page - 5
end11 = current_page + 6
if current_page +6 >= all_page:
start11 = all_page - 10
end11 = all_page + 1
#首页尾页设置
first_page = 1
last_page = all_page
#上一页,下一页 的设置
if current_page == 1:
global pre_page
#设置全局变量,否则没有引用 原来在python的函数中和全局同名的变量,
# 如果你有修改变量的值就会变成局部变量,在修改之前对该变量的引用自然就会出现没定义这样的错误了,
# 如果确定要引用全局变量,并且要对它修改,必须加上global关键字。
global next_page#
pre_page = current_page
next_page = current_page + 1
else:
if current_page >= all_page:
pre_page = current_page-1
next_page = current_page
else:#不是第一页,也没有 超过总页数,则按正常的写。
pre_page = current_page - 1
next_page = current_page + 1
#拼接所有页面的链接
for i in range(start11,end11):
# 当前页高亮显示。
if i == current_page:
temp = '<a style="color:red;" href="%s?page=%d">%d</a> ' % (url, i, i,)
else:
temp = '<a style="padding: 5px" href="%s?page=%d">%d</a> ' % (url, i, i,)
pager_str += temp
# print(temp)
context = {
'result':result,
'pager_str':pager_str,
'first_page':first_page,
'last_page':last_page,
'pre_page': pre_page,
'next_page':next_page,
}
return render(request, 'user_list.html', context=context)
#将上面代码包装成class类以便调用,没包装成功,算了我还是写方法吧
class Pager(object):
def init(self, current_page):
self.current_page = int(current_page)
def start(self):
return (self.current_page-1)*10
def end(self):
return self.current_page*10
def user_list(request):
current_page = request.GET.get(‘page’,1)
page_obj = Pager(current_page)#类的实例,可以使用实例的属性
result = UserList.objects.all()[page_obj.start,page_obj.end]
return render(request, ‘user_list.html’,{‘result’:result})
下面是html中代码:
{% for foo in result %} {% endfor %}
{{ foo.username }} | {{ foo.age }} |