分页

当我们要展示的条目比较多时,必须进行分页,不但能减小数据库读取数据压力,也有利于用户浏览。
Django为我们提供了一个Paginator分页工具,但这个工具功能差了点,不好添加CSS样式,所以前端的展示效果比较丑。
需要导包:
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def index(request):
all_ = models.类名.objects.all() # 获取类对象
id = request.GET.get(‘网页参数’,1) # 请求网页参数,如果没获取到默认为1
p = Paginator(all_, 2) # 使用分页器:传入两个参数(对象结果集 两条为一页)
p1 = p.page(int(id)) # 返回请求到的参数页,展示此页数据对象(网页参数必须int类型)

return render(request,'index.html',locals())

Paginator() :创建分页对象
page() :返回请求到的参数页,展示此页数据对象(网页参数必须int类型)

简单来说,使用分页分四步:
1.获取要展示的对象列表QuerySet。
2.将列表和每页个数传递给Paginator,返回一个分页对象。
3.调用该对象的各种方法,获取各种分页信息。
4.在HTML模板中,使用下面的分页信息构建分页栏。

模板页使用:
p1.has_previous # 如果有上一页
p1.previous_page_number # 上一页的页码

p.page_range # 列表形式返回当前所有的页数

p1.has_next # 如果有下一页
p1.next_page_number # 下一页的页码

p.count # 总数据量
p.num_pages # 总分页数
p1.start_index # 该页第一个数据的索引
p1.end_index # 该页最后一个数据的索引
p1.object_list # 返回当前页所有数据
p1.has_other_pages # 是否含有其他页 返回True,False
在这里插入图片描述
在这里插入图片描述
{% for i in p1 %}
{{ i.name }}
{% endfor %}

{% if p1.has_previous %}
{% for i in p.page_range %}
<a href="{% url '路由别名' %}?网页参数={{i}}"> {{i}}  </a>
{% endfor %}

{% if p1.has_next %}
<a href='{% url '路由别名' %}?网页参数={{ p1.next_page_number }}'>下一页</a>
{% endif %}

上传图片:
file_path = name + ‘.’+path.name.spilt(’.’)[-1]

​ file = ‘img/’+file_path

​ import os

​ with open(os.path.join(STATICFILES_DIRS[0],file),‘wb’) as fp:

​ fp.write(path.read())

​ models.Course.objects.create(

​ name=name,

​ teacher=teacher,

​ path=file,

​ number=number

​ )

​ return redirect(’/index/’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值