Flask-paginate показывает все результаты на одной странице - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь настроить нумерацию страниц для страницы продуктов, например:

from flask_paginate import Pagination, get_page_parameter

...

page = request.args.get(get_page_parameter(), type=int, default=1)

per_page = 4
offset = (page) * 10

search = False
q = request.args.get('q')
if q:
    search = True


pagination = Pagination(page=page, per_page=per_page, offset=offset, total=len(products), 
search=search, record_name='products')

return render_template('products.html', form=form, products=products, 
subcategories=subcategories, pagination=pagination)

, в то время как 'продукты' выбираются из предыдущего запроса в коде

cur.execute("SELECT * FROM products")
products = cur.fetchall()

ОднакоНа своей странице продуктов я получаю обратно все продукты в базе данных (20 в настоящее время), в то время как я вижу, что {{ pagination.info }} показывает "Отображение 1-4 продуктов в общей сложности 20".

Также {{ pagination.links }} работает правильно, так как показывает функциональные нумерацию страниц, но все продукты видны на странице.Есть ли у вас какие-либо советы, как это можно решить?

Спасибо

1 Ответ

0 голосов
/ 23 октября 2018

Я нашел решение для этого.Возможно, это не лучший вариант, и если вы знаете лучший способ сделать это, пожалуйста, дайте мне знать.Сейчас я решил это следующим образом:

# Creating a cursor
cur = conn.cursor()

# Setting page, limit and offset variables
per_page = 4
page = request.args.get(get_page_parameter(), type=int, default=1)
offset = (page - 1) * per_page

# Executing a query to get the total number of products
cur.execute("SELECT * FROM products")
total = cur.fetchall()

# Executing a query with LIMIT and OFFSET provided by the variables above
cur.execute("SELECT * FROM products ORDER BY added_on DESC LIMIT %s OFFSET %s", (per_page, offset))
products = cur.fetchall()

# Closing cursor
cur.close()

...

# Setting up the pagination variable, where you are using len(total) to set the total number of 
# items available
pagination = Pagination(page=page, per_page=per_page, offset=offset, total=len(total), 
record_name='products')

# Render template, where you pass "products" variable
# for the prepared query with LIMIT and OFFSET, and passing "pagination" variable as well.
return render_template('products.html', form=form, products=products, pagination=pagination)
...