Django:如何在不断增长的查询集中保持分页一致



我已经求助于stackoverflow的专家,希望我能解决这个问题。

让我们看看一个流行的应用程序,比如Instagram。假设你决定寻找带有标签#love的帖子(大约551,677,074个帖子,并且每秒都在增长!)

每页包含15个结果,按发布时间降序排列。当您向下滚动并加载更多时,它将返回下一组15个结果,以此类推。有人可能会问,如果查询集每秒都在增长,那么当我准备查看第2页时,我怎么能确保第2页将包含相对于第1页中得到的结果的下一组结果呢?如果查询集在增长,我是否有可能看到之前从第1页得到的部分或全部结果?在用户的眼中,就好像查询集被不断地向前推进,相对于他们上次的位置。

朋友们,这就是我的困境。如果查询集在增长,如何确保我请求的下一个页面将从我离开第1页的位置开始?

我已经创建了下面的模型:

class Blog(models.Model):
    author = models.ForeignKey(User)
    published_time = models.DateTimeField(auto_now_add=True)
    text = models.CharField(max_length=1000, blank=True)

我想创建一个视图,按publishhed_time排序,每次返回10个博客对象。

from django.core.paginator import Paginator
def BlogView(request):
    if request.META.has_key('HTTP_AUTHORIZATION') and request.method == 'GET':
        authmeth, auth = request.META['HTTP_AUTHORIZATION'].split(' ', 1)
                if authmeth.lower() == 'basic':
                        auth = auth.strip().decode('base64')
                        username, password = auth.split(':', 1)
                        authuser = authenticate(username=username, password=password)
                        if authuser: 
                                if authuser.is_active:
                                    queryset = Blog.objects.all().order_by('-published_time') #descending order
                                    paginator = Paginator(queryset, 10) # 10 objects per page
                                    blogs = paginator.page(page_number)
                                    data = []
                                    for blog in blogs:
                                            data.append(
                                                {'id': blog.pk,
                                                 'author_id': blog.author_id,
                                                 'text': blog.text
                                                 'published_time': blog.published_time})
                                    return HttpResponse(json.dumps({'results':data}), content_type="application/json")

非常简单的设置,然而,我不知道如何做到这一点,任何建议和例子将非常感激!

这个问题在这篇关于如何在django中设置缓存的文章中得到了回答:

缓存django中的查询结果

最新更新