私は自分のアプリで持っているクエリに対して前後のページネーションを機能させようとしています。
https://developers.google.com/appengine/docs/python/ndb/queries#cursorsの例から始めました。
この例では、現在のページの後/前のページの後続のリクエストで使用するためにテンプレートに渡すことができるカーソルを作成するために、通常の順方向/逆方向のページ付けを行うことを期待します。しかし、それが行っているのは、同じページのカーソルを最初から取得し、もう1つを最後から取得することです(私が正しく理解している場合)。
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()
問題、そしてこの質問のポイントは、私が使用more
しmore1
て次のページがあるかどうかを確認することです。そして、それは逆の意味では機能していません。最初のページの場合more1
はTrue
、、2番目のページのmore1
場合はFalse
、、後続のページの場合はTrue
。
False
私は最初のページとTrue
他のすべてのページに与える何かが必要になるでしょう。このmore
戻り値を使用するようですが、クエリの設定が間違っているか、その他の問題がある可能性があります。
みんな、ありがとう!
編集:これに対する簡単な解決策が見つからなかったので、ndbpagerの使用に切り替えました。