参考了 <The Django Book> 相关资料,原来用Django内置的分页功能实现分页,比我想象还要简单很多.
简单例子
views.py
- from django.core.paginator import Paginator
- from models import MyModel
- def list(request):
- try:
- page = int(request.GET.get('page',1))
- if page < 1:
- page = 1
- except ValueError:
- page = 1
- my_data = MyModel.objects.all()
- paginator = Paginator(my_data, 10)
- try:
- my_data_list = paginator.page(page)
- except:
- my_data_list = paginator.page(1)
- return render_to_response('my_template.html', locals())
XML/HTML代码
- {% for data in my_data_list .object_list %}
- {{ data }}<br />
- {% endfor %}
- <div class="pagination">
- <span class="step-links">
- {% if my_data_list.has_previous %}
- <a href="?page={{ my_data_list.previous_page_number }}">previous</a>
- {% endif %}
- <span class="current">
- Page {{ my_data_list.number }} of {{ my_data_list.paginator.num_pages }}.
- </span>
- {% if my_data_list.has_next %}
- <a href="?page={{ my_data_list.next_page_number }}">next</a>
- {% endif %}
- </span>
- </div>
my_data_list 对象中包含了多个属性和方法,可以非常方便的进行页面显示,链接生成
其中属性 : 数据对象列表 (object_list)中,每一个元素就是一个 model 对象.
关于 my_data_list 对象的其他方法和属性,可以通过 dir 方法查看
Python代码
PS:
根据打印出来的 sql 语句,发现它并不会取出所有记录.Python代码
官方文档说明:

