РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
360 of 643 menu

Метод paginate

Метод paginate применяется к объекту запроса query и возвращает объект пагинации Pagination. Первым параметром передаётся номер страницы page, вторым - количество записей на странице per_page. Третьим необязательным параметром передаётся error_out, который определяет, выбрасывать ли ошибку 404 при выходе за пределы диапазона страниц. Полученный объект содержит список элементов страницы items, номер текущей страницы page, общее число страниц pages и другие атрибуты.

Синтаксис

query.paginate(page, per_page, [error_out])

Пример

Давайте создадим модель Article и выведем вторую страницу по три записи на страницу:

from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' db = SQLAlchemy(app) class Article(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100)) with app.app_context(): db.create_all() for i in range(1, 8): db.session.add(Article(title=f'article {i}')) db.session.commit() res = Article.query.paginate(page=2, per_page=3) print(res.page) print(res.pages) print([a.title for a in res.items])

Результат выполнения кода:

2 3 ['article 4', 'article 5', 'article 6']

Пример

Давайте выведем список статей с постраничной навигацией в шаблоне:

from flask import Flask, render_template from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' db = SQLAlchemy(app) class Article(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100)) @app.route('/articles/<int:page>') def articles(page): pagination = Article.query.paginate(page=page, per_page=3) return render_template('articles.html', pagination=pagination)

Теперь создадим шаблон:

{% for article in pagination.items %} <p>{{ article.title }}</p> {% endfor %} <p>Страница {{ pagination.page }} из {{ pagination.pages }}</p> {% if pagination.has_prev %} <a href="/articles/{{ pagination.prev_num }}">Назад</a> {% endif %} {% if pagination.has_next %} <a href="/articles/{{ pagination.next_num }}">Вперёд</a> {% endif %}

Результат выполнения кода для адреса /articles/2:

<p>article 4</p> <p>article 5</p> <p>article 6</p> <p>Страница 2 из 3</p> <a href="/articles/1">Назад</a> <a href="/articles/3">Вперёд</a>

Пример

Давайте отключим ошибку 404 при выходе за пределы диапазона страниц:

from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' db = SQLAlchemy(app) class Article(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100)) with app.app_context(): res = Article.query.paginate(page=100, per_page=3, error_out=False) print(res.items) print(res.page)

Результат выполнения кода:

[] 100

Смотрите также

  • класс SQLAlchemy,
    который связывает Flask с базой данных
  • метод get_or_404,
    который возвращает запись или ошибку 404
  • метод first_or_404,
    который возвращает первую запись или ошибку 404
  • атрибут Model,
    который является базовым классом моделей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить