下面是一个简单的Django分页功能的示例,包括视图函数和对应的模板文件:
假设有一个名为 myapp
的应用,其中有一个名为 MyModel
的模型需要分页显示。
- 在视图文件
views.py
中编写分页功能的视图函数:
from django.shortcuts import render
from django.core.paginator import Paginator
from myapp.models import MyModel
def my_view(request):
# 获取所有MyModel对象
queryset = MyModel.objects.all()
# 创建分页器对象,每页显示5条记录
paginator = Paginator(queryset, 5)
# 获取当前页数,默认为1
page_number = request.GET.get('page', 1)
# 获取当前页的数据对象
page_obj = paginator.get_page(page_number)
# 将分页数据传递给模板进行渲染
return render(request, 'my_template.html', {'page_obj': page_obj})
在 templates
目录下创建模板文件 my_template.html
,并编写用于显示分页数据的模板:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My Page</title>
</head>
<body>
<h1>My Page</h1>
<!-- 显示当前页的数据 -->
<ul>
{% for obj in page_obj %}
<li>{{ obj }}</li>
{% endfor %}
</ul>
<!-- 显示分页导航 -->
<div>
{% if page_obj.has_previous %}
<a href="?page=1">First</a>
<a href="?page={{ page_obj.previous_page_number }}">Previous</a>
{% endif %}
<span>{{ page_obj.number }}</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">Next</a>
<a href="?page={{ page_obj.paginator.num_pages }}">Last</a>
{% endif %}
</div>
</body>
</html>
在这个示例中,视图函数 my_view
获取了所有的 MyModel
对象,并使用 Paginator
对象对数据进行分页处理。然后,将分页数据传递给模板 my_template.html
进行渲染。模板中通过循环遍历 page_obj
来显示当前页的数据,并根据 has_previous
和 has_next
来显示分页导航链接。