Pagination: постраничный вывод в App Engine
Разбиение вывода информации на страницы легко осуществимо в приложениях Google App Engine, для чего достаточно использовать обычный метод query.fetch(), подробнее описанный в документации:
Небольшой пример части кода, как можно организовать загрузку объектов со статьями из хранилища по-странично, выглядит следующим образом:
def generate_stories(self, query, template_values={}):
""" Создание страницы с помощью переданной строки запроса объектов Stories.
Мы работаем с различными типами вывода информации (форматы Atom, HTML и другие),
таким образом страницы, которые выдают целиком списки доступных статей не должны
воспроизводить эту логику.
Параметры функции:
query: созданный объект запроса данных, который извлекает список статей
template_values: дополнительные значения для передачи в шаблон
"""
# Определяем рамки получаемых значений с помощью параметров start и num,
# переданных в адресной строке
start = self.get_arg_range('start', minvalue=0, maxvalue=1000, default=0)
num = self.get_arg_range('num', minvalue=1, maxvalue=100, default=10)
# включаем в выборку еще один дополнительный объект для определения существования
# следующей страницы - этот метод быстрее, чем выполнение второго запроса
# для проверки существования следующей страницы
stories = query.fetch(num+1, start)
# был ли извлечен дополнительный объект? Если да, то это не последняя страница
more_stories = len(stories) > num
# убираем этот дополнительный объект из результатов
stories = stories[:num-1]
# если переменная не равна нулю, то также имеется предыдущая страница
prev_stories = start > 0
# и передаем реальное количество объектов, которые будут отображены
disp_end = max(len(stories), 0) + start + 1
disp_start = start + 1