pay*_*ala 5 google-app-engine app-engine-ndb
我正在尝试前进和后退分页工作我的应用程序上的查询.
我从以下示例开始:https://developers.google.com/appengine/docs/python/ndb/queries#cursors
我希望该示例能够执行典型的前向/后退分页来创建可以传递给模板的游标,以便在当前页面之后/之前的页面的后续请求中使用.但它正在做的是获取同一页面的游标,一个从开始,另一个从最后(如果我已经正确理解).
我想要的是一个光标到下一页的开头,一个光标到上一页的开头,在我的UI中使用.
基于上面提到的示例,我已经设法使用以下代码来实现:
curs = Cursor(urlsafe=self.request.get('cur'))
q = MyModel.query(MyModel.usett == usett_key)
q_forward = q.order(-MyModel.sugerida)
q_reverse = q.order(MyModel.sugerida)
ofus, next_curs, more = q_forward.fetch_page(num_items_page,
start_cursor=curs)
rev_cursor = curs.reversed()
ofus1, prev_curs, more1 = q_reverse.fetch_page(num_items_page,
start_cursor=rev_cursor)
context = {}
if more and next_curs:
context['next_curs'] = next_curs.urlsafe()
if more1 and prev_curs:
context['prev_curs'] = prev_curs.reversed().urlsafe()
Run Code Online (Sandbox Code Playgroud)
问题和这个问题的关键在于我使用more并more1查看是否有下一页.而这在后向意义上并不奏效.对于第一页,more1是True,在第二页more1中False,和后续页面给出True.
我需要False为第一页和True每个其他页面提供的东西.似乎这个more返回值是使用的东西,但也许我有一个错误的查询设置,或任何其他错误.
感谢大家!
编辑:由于我没有找到一个简单的解决方案,我转而使用ndbpager.
小智 2
没有这样的事。您知道,如果您使用游标启动查询(第一页通常没有游标),那么当前页面之前(至少)有一个页面。访问上一页的常见技巧是反转排序顺序。
如果您有一个按创建日期降序排序的列表,则可以获取当前页面第一个元素的创建日期,使用反向排序顺序查询创建日期 < 此创建日期的元素。这将返回比给定创建日期更新的最旧元素。翻转检索到的元素列表(以再次将它们调整为正确的顺序),您将获得之前页面的元素,而无需使用光标。
注意:这要求排序顺序的值不同。
在某些情况下,还可以使用允许随机访问不同页面的预构建索引,请参阅https://bitbucket.org/viur/server/src/98de79b91778bb9b16e520acb28e257b21091790/indexes.py了解更多信息。
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |