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

时间:2015-10-17 14:56:26

标签: python google-app-engine google-cloud-datastore

我正在尝试创建一个分页机制来翻阅查询。前进不是问题。但是,转到上一页似乎并非易事。

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

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>

这种作品。唯一的问题是,当用户“改变方向”(页面返回)时,它会将他带到他再次打开的页面,并且只有在再次点击之前它才会进入上一页。

因此,如果点击,上一个然后下一个,我会一直保持在同一页面上。

请告知。

1 个答案:

答案 0 :(得分:0)

您可以采用一些策略。存储以前的游标 - 请参阅What is the correct way to get the previous page of results given an NDB cursor?或者搜索SO以寻找其他方法{{3}}