2015-10-17 2 views
0

Я пытаюсь создать механизм поискового вызова для страницы через запрос. Переход вперед не является проблемой. Однако переход на предыдущую страницу является нетривиальным.App Engine datastore paging - предыдущая страница

То, что я до сих пор это (почему у меня такое ощущение, что это должно быть проще?):

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> 

Этот вид работ , Единственная проблема заключается в том, что когда пользователь «меняет направление» (страницы назад), он возвращает его на страницу, на которой он снова включен, и только после другого щелчка на предыдущем идет на предыдущую страницу.

Так что, если щелкнуть, «Предыдущий» и «Далее», я остаюсь на одной странице все время.

Просьба сообщить.

ответ

0

Есть несколько стратегий, которые вы можете принять. Хранение предыдущих курсоров - см. https://p.ota.to/blog/2013/4/pagination-with-cursors-in-the-app-engine-datastore/ или поочередно поиск SO для другого подхода What is the correct way to get the previous page of results given an NDB cursor?

+0

Исправьте меня, если я ошибаюсь, но мне кажется, что основной проект терпит неудачу, если мне нужно «принять стратегии», чтобы реализовать простую функциональность подкачки: ( – MeLight

+0

Вы имеете дело с средой без SQL. Я бы воспользовался «недостатком дизайна» с помощью google. Однако обе ссылки предоставляют вам решение. Вам нужно выйти за пределы мира SQL и понять, что происходит Посмотрите на DynamoDB на AWS. Подобные стратегии необходимы для обратного разбиения на страницы. См. http://stackoverflow.com/questions/14396346/pagination-in-dynamodb –

Смежные вопросы