Vamos falar sobre paginação de dados, algo muito usado, um exemplo de paginação esta aqui nesse blog. Ao acessar a pagina inicial você ira ver o numero de paginas e as setinhas para navegar nelas, isso foi possível graças ao ObjectPaginator, um recurso do Django para separar os dados de um objeto em paginas.
Vamos ao que interessa, vamos usar a seguinte declaração:
from django.core.paginator import ObjectPaginator
def index(request, pagina=None):
posts = Posts.objects.all()
paginacao = ObjectPaginator(posts, 4)
num_pagina = int(pagina)
posts_resumo = paginacao.get_page(num_pagina - 1)return render_to_response('index.html', {'posts_resumo':posts_resumo,
'tem_proximo': paginacao.has_next_page(num_pagina - 1),
'tem_anterior': paginacao.has_previous_page(num_pagina - 1),
'pagina': num_pagina,
'proximo': num_pagina + 1,
'anterior': num_pagina - 1,
'paginas': paginacao.pages})
{% if tem_anterior %}
<a href="/pagina/{{ anterior }}">« anterior</a>
{% else %}
« anterior
{% endif %}
| página {{ pagina }} de {{ paginas }} |
{% if tem_proximo %}
<a href="/pagina/{{ proximo }}">próximo »</a>
{% else %}
proximo »
{% endif %}(r'^pagina/(?P<pagina>\d+)/$', 'djblog.blog.views.index'),
tá de sacanagem comigo... :D
tudo o que eu estava esquecendo era esse bendito <b>(r'^pagina/(?P<pagina>\d+)/$', 'djblog.blog.views.index'),</b>
O Renato, só tinha esquecido de colocar a url... estava tudo certo... hehehehe
Excelente dica.
Com o Django é muito simples implementar isso. Como deveria ser em qualquer linguagem/framework
:-)
Vai ai uma dica....
aqui em:
paginacao = ObjectPaginator(posts, 4)
vc pode usar uma constante ou até mesmo uma variável normal, para ficar trocando o tamanho da paginação, por exemplo:
T_PAGINACAO = 10
paginacao = ObjectPaginator(posts, T_PAGINACAO)
Ainda mais essa variável pode ser passada por get, assim deixando o usuário a escolha de quantos registros quer por página....
é uma idéia :D
Na versão em desenvolvimento saiu uma nova classe para paginação, o Paginator:
http://www.djangoproject.com/documentation/models/pagination/
eu achei que melhorou muito :-)
Oi Igor!
Ultimamente tenho tido pouco tempo, mas fiquei sabendo da existência dessa nova classe, estou penando aqui com algumas coisas mas assim que me sobrar um tempo rasoavel eu farei um novo artigo abordando essas alterações no paginador e claro atualizar o blog tb pois aqui estou usando o modo antigo.
Vlw!
Nossa nem conhecia esse recurso! Criei esse num projeto meu de outra maneira, contando o número de postagens. vlw pela dica
Só avisando que o ObjectPaginator está depricado dando lugar ao Paginator que agora, usa uma classe Page e talz. Muda um pouco o código no fim das contas.
Feeds RSS
Ultimas Mensagens
Tags (categorias)
Links
Histórico