Django分页技术
掌握Django内置分页器,优雅处理大量数据展示。 · 难度:入门 · +15XP
分页的重要性
当数据库记录数很大时,一次性加载所有数据会导致页面渲染缓慢、用户体验差。Django提供了Paginator类,轻松实现分页。
基本用法
from django.core.paginator import Paginator
from .models import Article
def article_list(request):
all_articles = Article.objects.all()
paginator = Paginator(all_articles, 10) # 每页10条
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, 'list.html', {'page_obj': page_obj})模板中使用
<!-- list.html -->
{% for article in page_obj %}
<h2>{{ article.title }}</h2>
{% endfor %}
<div class="pagination">
<span>第 {{ page_obj.number }} / {{ page_obj.paginator.num_pages }} 页</span>
{% if page_obj.has_previous %}
<a href="?page={{ page_obj.previous_page_number }}">上一页</a>
{% endif %}
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">下一页</a>
{% endif %}
</div>| 属性/方法 | 说明 |
|---|---|
| page_obj.number | 当前页码 |
| page_obj.paginator.num_pages | 总页数 |
| page_obj.has_previous | 是否有上一页 |
| page_obj.has_next | 是否有下一页 |
| page_obj.object_list | 当前页的数据列表 |
练习提示: 修改starter_code,使用Paginator将数据分页,每页显示5条。在模板中添加页面导航链接。