我已经转向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)
我想创建一个视图,按照published_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")
非常简单的设置,但我无法弄清楚如何做到这一点,我们将非常感谢任何建议和示例!