Paginator - Paginação
Sistema de paginação para listagens.
Uso Básico
from velox.paginator import Paginator
@app.get('/posts')
def list_posts(req, res):
page = int(req.args.get('page', 1))
per_page = 10
posts = Post.all()
paginator = Paginator(posts, per_page=per_page)
page_obj = paginator.get_page(page)
res.json({
'posts': page_obj.items,
'total': page_obj.total,
'page': page_obj.number,
'pages': page_obj.pages,
})
—
Paginator com QuerySet
# Paginar resultado do banco
paginator = Paginator(queryset, per_page=20)
page1 = paginator.get_page(1)
page2 = paginator.get_page(2)
—
Page Object
page = paginator.get_page(2)
page.number # número da página atual
page.items # itens da página
page.total # total de itens
page.pages # total de páginas
page.has_prev # existe página anterior?
page.has_next # existe próxima página?
page.prev_number # número da página anterior
page.next_number # número da próxima página
page.range # lista de números de página para exibir
—
Template
<div class="pagination">
{% if page.has_prev %}
<a href="?page={{ page.prev_number }}">‹ Anterior</a>
{% endif %}
{% for p in page.range %}
{% if p == page.number %}
<span class="current">{{ p }}</span>
{% else %}
<a href="?page={{ p }}">{{ p }}</a>
{% endif %}
{% endfor %}
{% if page.has_next %}
<a href="?page={{ page.next_number }}">Próximo ›</a>
{% endif %}
</div>
—
Paginator com Model
from velox.database import Model
class Post(Model):
table = 'posts'
# Método paginate no Model
result = Post.paginate(page=1, per_page=10)
# Retorna: {'items': [...], 'total': 100, 'page': 1, 'pages': 10}
—
Parâmetros
paginator = Paginator(
items,
per_page=10, # itens por página
orphans=3, # itens órfãos na última página
allow_empty_first_page=True
)
—