当前分类:python>>正文

django这样分页不踩坑

来源:acboy   时间:2022年7月30日   编辑

举个例子吧。

比如,我的数据模型为Posts,网上关于分页的教程,基本上都是下面样的写法:

posts=Posts.objects.all().order_by('-id')
pg_num=request.GET.get('page',1)
paginator1 = Paginator(posts, 12)
pageobj = paginator1.page(pg_num)
这段代码看着也没什么问题啊,获取全部文章,然后进行分页,每页12条内容啊?
看着没什么问题,实际上在你使用这套程序时间长了后,问题就会曝出来。
什么问题?
随着你网站数据越来越多,你的网站打开速度会越来越慢,有网友做了测试,差不多3000条数据的时候,打开你网站首页就差不多要1秒钟时间。
原因就在于这一句:
posts=Posts.objects.all().order_by('-id')
这一句意思是要获取你数据库中的全部数据,再进行分页。
实际上大可不必这样做。
观察一下百度、必应这些搜索引擎的分页就知道了,我们只需要将部分数据进行分页就行了。
必应就分了20页!每次搜索只出来5页!因为绝大多数网友的习惯,不会去翻几百几十页
我们也可以这样做,将代码改写一下,提升效率:
        count=Posts.objects.all().count()
        if count>120:
            posts=Posts.objects.all().order_by('-id')[:120]
        else:
            posts=Posts.objects.all().order_by('-id')
        pg_num=request.GET.get('page',1)
        paginator1 = Paginator(posts, 12)
        pageobj = paginator1.page(pg_num)

我们只取120条数据,每页12条数据,分个10页给用户就行了。如果嫌10页不够,那就20页好了,反正没必要将所有数据进行分页!

不知道你赞同我的做法不?

[猜你喜欢]

标签: django优化