Django框架中级
在Django框架中,我们可以使用内置的Paginator
类来实现分页功能。以下是一个简单的例子,展示了如何在Django视图中使用Paginator
来分页查询集:
from django.core.paginator import Paginator
from django.shortcuts import render
from .models import MyModel
def my_view(request):
# 获取对象列表
object_list = MyModel.objects.all()
# 创建Paginator对象
paginator = Paginator(object_list, 10) # 每页显示10个对象
# 从GET请求中获取页码
page_number = request.GET.get('page')
# 获取具体页码的Page对象
page_obj = paginator.get_page(page_number)
# 将Page对象传递到模板中
return render(request, 'my_template.html', {'page_obj': page_obj})
在模板中,你可以使用page_obj
来显示当前页的对象,并使用paginator
提供的模板标签来显示分页导航链接:
{% for object in page_obj %}
<!-- 显示对象信息 -->
<p>{{ object.name }}</p>
{% endfor %}
<!-- 显示分页控件 -->
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">« First</a>
<a href="?page={{ page_obj.previous_page_number }}">‹ Previous</a>
{% endif %}
{% for page in page_obj.pages %}
{% if page %}
{% ifequal page page_obj.number %}
<span class="current">{{ page }}</span>
{% else %}
<a href="?page={{ page }}">{{ page }}</a>
{% endifequal %}
{% else %}
...
{% endif %}
{% endfor %}
{% 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 %}
</span>
</div>
这个例子展示了如何在Django视图中创建Paginator
对象,并在模板中使用它来显示对象列表和分页控件。
评论已关闭