繁体   English   中英

App Engine 数据存储分页 - 上一页

[英]App Engine datastore paging - previous page

我正在尝试创建一种分页机制来通过查询进行分页。 前进不是问题。 不过,转到上一页似乎并不简单。

到目前为止我所拥有的是这个(为什么我觉得它应该更简单?):

cursor_urlsafe = self.request.get('cursor', None)
rev = bool(self.request.get('rev', None))
cursor = ndb.Cursor(urlsafe=cursor_urlsafe)
if rev:
    next_query = Shot.query(Shot.schedule_key == schedule.key).order(Shot.date_created)
    cursor = cursor.reversed()
else:
    next_query = Shot.query(Shot.schedule_key == schedule.key).order(-Shot.date_created)

shots, next_cursor, more = next_query.fetch_page(PAGE_LENGTH, start_cursor=cursor)

if rev:
    shots.sort(key=lambda x: -x.date_created_epoch)

next_cursor_url_safe = next_cursor.urlsafe() if next_cursor else None
template_params = {
    'shots': shots,
    'next_cursor': next_cursor_url_safe,
    'prev_cursor': next_cursor_url_safe if cursor_urlsafe else None
}

在客户端:

<a href="/schedule/{{ s.id }}?cursor={{ prev_cursor }}&rev=true">Previous</a><br>
<a href="/schedule/{{ s.id }}?cursor={{ next_cursor }}">Next</a>

这类作品。 唯一的问题是,当用户“改变方向”(向后翻页)时,它会将他带到他所在的页面,并且只有在再次单击上一页后才会转到上一页。

因此,如果单击“上一个”和“下一个”,我将始终保持在同一页面上。

请指教。

一种解决方案是让客户端在向前移动时保留游标列表。 当他们向后翻页时,使用列表中的前一个 cursor。 后端的游标可以导出为字符串。 在 Java 中,您使用 toUrlSafe 方法。 Python 可能有一个等价物。

当使用之前的 cursor 时,我建议删除列表中的最后一个 cursor,以便在用户再次向前翻页时创建它的新实例。 话又说回来,这取决于数据更改的频率。 如果数据很少更改,您可以跳过从列表中删除游标,而只使用缓存的游标来加快后端时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM