使用Bootstrap样式
使用Bootstrap设置项目样式
topics页面分页设置
当前topics页面下显示全部的topic,没有分页设置,下面使用django.core.paginator.Paginator
进行分页设置。
class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
的构成:
- 接受一个对象列表
object_list
; - 每页显示的对象数量
per_page
; orphans
不为0时,最后一页会增加显示那些不够一页的对象;- 当对象列表没有数据时,默认返回一个没有对象的空页。
Paginator分页类的几个属性:
Paginator.count
:获取object_list
的对象数量;Paginator.num_pages
:获取分页的总页数;
在request请求中可以获取当前要显示的页面,其URL形式为http://127.0.0.1:8000/topics/?page=1
。Paginator.get_page
方法会返回一个Page
对象,它像是包含当页显示对象的一个列表。
Page
对象属性:
object_list
:当前页包含的显示对象;number
:当前页的页数;paginator
:获取与page对象相关联的分页对象paginator
;
Page
对象方法:
.has_previous()
:是否有前一页;.has_next()
:是否有后一页;previous_page_number()
:前一页页数;next_page_number()
:下一页的页数;
根据Paginator
和Page
类,设计分页显示。
@login_required
def topics(request):
"""全部的topics"""
# 取当登录前用户创建的topic
topics = Topic.objects.filter(owner=request.user).order_by('-date_added')
paginator = Paginator(topics, 25) # 每页25条
page = request.GET.get('page')
topics = paginator.get_page(page) # 获取指定页面
context = {
'topics':topics}
return render(request, 'topics.html', context)
将当前页Page
对象实例topics
传入topics模板:
{% extends "base.html" %}
{% block title %}Topics{% endblock %}
{% block header %}
<h2>Topics: