Проект создан чтобы показать как работает пагинация постов на фреймворке flask
Формируем get запрос с ключом page, стартовой страницей 1 и типом данных integer Формат запроса в строке браузера: ?page=1
page = request.args.get('page', 1, type=int)
Flask-SQLAlchemy дает нам хороший инструмент для разбиения больших списков на страницы метод paginate вызывается на любом Query объекте. В данном примере это объект posts
Принимает аргументы: page - номер текущей страницы, 1 по умолчанию per_page - количество элементов (постов) на странице
posts = Post.query.paginate(page=page, per_page=20)
То есть, на каждом page+1 будет выводиться 20 элементов
Для примера генерирую сотню статей циклом for, используя базу sqlite3 for i in range(1, 101): post = Post(title=f'New post', content=f'Я создан автоматически, мой номер {i}') db.session.add(post) db.session.commit()
Если в базе уже есть сотня страниц, добавление в базу прекращается. За это отвечает условие:
if not posts.total >= 100:
не добавлять статьи если уже есть сотня в базе
метод total считает количество объектов в posts
В файле index.html с помощью шаблонизатора Jinja items - элементы текущей страницы проходим циклом и выводим элементы текущей страницы из объекта paginate
-
{% for post in posts.items %}
- {{ post.title }} - {{ post.content }} {% endfor %}
итерируемся в цикле по объекту paginate
{% for page in posts.iter_pages(left_edge=1, right_edge=1, left_current=1, right_current=2) %}
iter_pages итерирует по номерам страниц в нумерации страниц. Четыре параметра контролируют пороговые значения того, сколько элементов (кнопок для навигации) должно быть произведено по сторонам. Номера пропущенных страниц отображаются как None.
{% if posts.page == page %}
Если posts.page = 4 и если page равно 4 то True
print(posts.page) # 4
print(page) # 4
print(posts.page == page) True
Показываем страницу page=4 с её 20-ю постами (20 указано в per_page=20) Находимся на текущей странице, иначе можем сделать переход на другие страницы, согласно пороговым значениям итератора left_edge=1, right_edge=1, left_current=1, right_current=2
Страницы, уходящие за границы помечаются как None и на данном примере выводятся как ... троеточие
Установленные пакеты:
flask flask-sqlalchemy
Установка зависимостей:
pip install -r req.txt
Ссылка на пост ВК https://vk.com/python_for_me?w=wall-184890296_579%2Fall
Михаил Терехов ака MikedoIT 2021