• Home
  • Учебник по ExtJS
  • О сайте
  •  



    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
    

    Leave a Reply