类似下面这种没有滚动的:
首先,创建一些数据:
在models.py中:
from django.db import models
class User(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
在urls.py中:
path('add/', views.add),
path('select/', views.select)
def add(request):
for x in range(1, 101):
name = '张三%s'%x
age = 20 + x
user = User(name=name, age=age)
user.save()
return HttpResponse('ok')
from django.core.paginator import Paginator, PageNotAnInteger, InvalidPage, EmptyPage
def select(request):
# 1. 把需要分页的数据全部查询出来;
user_list = User.objects.all()
# 2. 利用user_list数据,创建一个分页器对象
# 参数1:要分页的数据;参数2:设置每页要展示的数据个数;参数3:如果最后一页不到5个数据,是否将最后一页的数据合并到上一页进行展示;默认是False,不合并;
paginator = Paginator(user_list, 5)
# 3. 创建页面对象Page,每一个page对应的是每一个页面,这个page中包含:
# page对象有三个属性:
# a> page.number: 表示当前查询的页码;
# b> page.object_list: 表示当前页要展示的数据;
# c> page.paginator: 它就是上面创建的Paginator(user_list, 5)这个对象,无论是哪一页,这个paginator对象始终跟着Page对象;
try:
page_number = request.GET.get('page', '1')
page = paginator.page(page_number)
except (PageNotAnInteger, EmptyPage, InvalidPage):
# 如果出现上述异常,默认展示第1页
page = paginator.page(1)
return render(request, 'index.html', {'page': page})
将page对象传入到HTML中,HTML的写法:
<nav aria-label="Page navigation">
{% for data in page.object_list %}
<p>{{ data.id }}-{{ data.name }}-{{ data.age }}</p>
{% endfor %}
<ul class="pagination">
{% if page.has_previous %}
{# page.has_previous: 判断当前页page是否含有上一页的属性 #}
{# page.previous_page_number:上一页的页码 #}
<li>
<a href="?page={{ page.previous_page_number }}" aria-label="Previous">
<span aria-hidden="true">上一页</span>
</a>
</li>
{% endif %}
{# 每次点击页码,这20次循环都会从头开始循环。 #}
{% for page_number in page.paginator.page_range %}
{% if page_number == page.number %}
{# 如果当前查询的页码和循环的页码刚好相等 #}
<li class="active"><a href="?page={{ page_number }}">{{ page_number }}</a></li>
{% else %}
<li><a href="?page={{ page_number }}">{{ page_number }}</a></li>
{% endif %}
{% endfor %}
{% if page.has_next %}
<li>
<a href="?page={{ page.next_page_number }}" aria-label="Previous">
<span aria-hidden="true">下一页</span>
</a>
</li>
{% endif %}
</ul>
</nav>
先执行/add/添加上数据,之后/select/就出现了要的结果