如何在google appengine上使用python实现分页?

如何在google appengine上使用python实现分页?,python,google-app-engine,pagination,Python,Google App Engine,Pagination,我正在建立一个像reddit这样的网站。对象按等级排序。我希望有人能帮我实现分页。我只想先加载前20个对象。然后单击“下一步”按钮,我希望根据第20个对象的评级加载接下来的20个对象。以下是谷歌文档: 有人知道这样做的方法吗?或者有一个好的教程吗?如果在数据存储查询中使用limit=20,然后获取一个游标以获取下一个20,那么这是非常简单的。这是一个通用函数,我使用它来检索模型实例和游标。该函数获取参数,我正在从请求中读取这些参数 def retrieve_dbs(query, order=No

我正在建立一个像reddit这样的网站。对象按等级排序。我希望有人能帮我实现分页。我只想先加载前20个对象。然后单击“下一步”按钮,我希望根据第20个对象的评级加载接下来的20个对象。以下是谷歌文档:


有人知道这样做的方法吗?或者有一个好的教程吗?

如果在数据存储查询中使用limit=20,然后获取一个游标以获取下一个20,那么这是非常简单的。这是一个通用函数,我使用它来检索模型实例和游标。该函数获取参数,我正在从请求中读取这些参数

def retrieve_dbs(query, order=None, limit=None, cursor=None, **filters):
  ''' Retrieves entities from datastore, by applying cursor pagination
  and equality filters. Returns dbs and more cursor value
  '''
  limit = limit or config.DEFAULT_DB_LIMIT
  cursor = Cursor.from_websafe_string(cursor) if cursor else None
  model_class = ndb.Model._kind_map[query.kind]
  if order:
    for o in order.split(','):
      if o.startswith('-'):
        query = query.order(-model_class._properties[o[1:]])
      else:
        query = query.order(model_class._properties[o])

  for prop in filters:
    if filters.get(prop, None) is None:
      continue
    if type(filters[prop]) == list:
      for value in filters[prop]:
        query = query.filter(model_class._properties[prop] == value)
    else:
      query = query.filter(model_class._properties[prop] == filters[prop])

  model_dbs, more_cursor, more = query.fetch_page(limit, start_cursor=cursor)
  more_cursor = more_cursor.to_websafe_string() if more else None
  return list(model_dbs), more_cursor
你可以这样称呼它。我使用扩展实体\ db和实体\ dbs表示我的变量引用实体对象,*\ db和*\ dbs定义是否有一个或多个结果

entity_dbs, entity_cursor = retrieve_dbs(
    model.Entity.query(),
    limit=limit,  # Your limit parameter
    cursor=cursor,  # The cursor if you want to grab a batch of next results
    order=order,
  )
如何“事后获取光标”?我看到了这个答案:但我不确定发生了什么。在调用query.get()之后,调用query.cursor()来获取光标。单击“下一步”按钮发出下一个查询时,在下一个查询上传入光标。见文件: