Tôi đang cố gắng để chuyển tiếp và phân trang ngược lại hoạt động cho truy vấn tôi có trên ứng dụng của mình.Phân trang với con trỏ ngược trong appengine
Tôi đã bắt đầu với ví dụ tại địa chỉ: https://developers.google.com/appengine/docs/python/ndb/queries#cursors
Tôi mong chờ ví dụ đó để làm một tiền đạo điển hình/quay pagination để tạo ra con trỏ mà bạn có thể vượt qua cho mẫu của bạn để được sử dụng trong một yêu cầu tiếp theo cho trang sau/trước trang hiện tại. Nhưng những gì nó đang làm là nhận được con trỏ cho cùng một trang, một từ đầu và khác từ cuối (nếu tôi đã hiểu một cách chính xác).
Điều tôi muốn là con trỏ ở đầu trang sau và con trỏ đến đầu trang trước, để sử dụng trong giao diện người dùng của tôi.
Tôi đã cố gắng gần như nhận được rằng với đoạn mã sau, dựa trên các ví dụ được đề cập:
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()
Vấn đề, và điểm của câu hỏi này, là tôi sử dụng more
và more1
để xem nếu có trang tiếp theo. Và điều đó không có ý nghĩa ngược lại. Đối với trang đầu tiên, more1
là True
, trong trang thứ hai more1
là False
và các trang tiếp theo cung cấp True
.
Tôi cần một thứ cung cấp False
cho trang đầu tiên và True
cho mọi trang khác. Có vẻ như giá trị trả về more
này là điều cần sử dụng, nhưng có thể tôi có thiết lập Truy vấn không đúng hoặc bất kỳ điều gì khác không đúng.
Cảm ơn tất cả mọi người!
Chỉnh sửa: Vì tôi không tìm thấy giải pháp đơn giản cho điều này, tôi đã chuyển sang sử dụng ndbpager.
Có trường hợp khi trang đầu tiên được truy vấn bằng con trỏ, ví dụ: khi bạn chuyển đến trang 2 và quay lại trang 1, bạn sẽ có trang 1 với con trỏ. Và nếu bạn phụ thuộc vào điều đó, bạn sẽ ở trang 1 cho thấy có một trang trước chỉ vì bạn có con trỏ. – payala
Làm cách nào để bạn tạo con trỏ trỏ trước Element đầu tiên của Danh sách? Ive đã thử nó, nhưng tôi chỉ có thể tạo con trỏ sau khi tìm nạp ít nhất một phần tử - và cho phép con trỏ trỏ * sau * phần tử này (Vì vậy truy vấn sử dụng con trỏ này sẽ luôn mất phần tử đầu tiên này) –
Tôi nhận con trỏ đó sau khi chạy truy vấn trên truy vấn đảo ngược thứ tự. Trên thực tế, bạn nói đúng, tôi hoàn toàn không nhận được con trỏ trỏ trước phần tử đầu tiên, tôi nhận được con trỏ ở đâu đó sau phần tử đầu tiên trong truy vấn ngược, tương ứng với phần tử gần cuối truy vấn chuyển tiếp . Vì vậy, bạn có được ảo tưởng rằng nó là trước yếu tố đầu tiên nếu bạn nghĩ rằng danh sách là hình tròn, nhưng nó không phải là. Có lẽ, điều này có thể được giải quyết nếu tôi bắt đầu truy vấn cung cấp một con trỏ đến phần tử đầu tiên của truy vấn chuyển tiếp, nhưng tôi không biết cách thực hiện điều đó. – payala