Os dois funcionam bem juntos, demorei um pouco para descobrir. Com base no exemplo da documentação:
{% block content %}
<form action="" method="get">
{{ f.form.as_p }}
<input type="submit" />
</form>
{% autopaginate f.qs 40 as filter_list %}
{% for obj in filter_list %}
{{ obj.name }} - ${{ obj.price }}<br />
{% endfor %}
{% paginate %}
{% endblock %}
A chave é que você tem que usar o argumento _as_ da paginação.
Muito, muito útil. Obrigada.
Eu sugiro documentar como isso funciona com a classificação de django também. Infelizmente, a ordenação de django precisa ir antes da paginação e não suporta a palavra-chave 'as', então _não_ somos capazes de fazer algo assim:
{% autosort f.qs as actionlog %}
{% autopaginate actionlog 30 %}
Arquivado em upstream em http://github.com/directeur/django-sorting/issues/#issue/4.
Pegue esse problema quando tento o procedimento acima.
http://code.google.com/p/django-pagination/issues/detail?id=59#c0
Alguma ideia do que possa ser?
Há um problema com django-pagination: quando você está, digamos, na página 5 e você aplica um filtro, o filtro passa a variável GET "página" também, então na página filtrada você já está na página 5, isso está errado . Existe uma maneira de excluir da url a variável que django-pagination usa ao aplicar um filtro? Espero que isso faça sentido ...
mdgart,
Resolvi o problema da variável de página no cliente com jQuery e a biblioteca jQuery Back Button & Query (BBQ). Veja: http://benalman.com/code/projects/jquery-bbq/docs/files/jquery-ba-bbq-js.html
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery.ba-bbq.min.js"></script>
<script type="text/javascript">
// on page load complete
$(function(){
// force all filter links to return to page 1
$('#changelist-filter a').querystring('page=1');
});
</script>
Quando o usuário clica em um link de filtro, o javascript força o parâmetro get da "página" a 1.
No meu exemplo, todos os meus filtros são exibidos como links, localizados em uma div com um id de "changelist-filter". Você precisará alterar seu seletor jQuery conforme apropriado.
Espero que isto ajude.
mdgart, jonathonadler,
Resolvi o problema da variável de página de uma maneira ligeiramente diferente que evita depender de javascript: simplesmente não passe o parâmetro 'página' para o FilterSet. Por exemplo, com base no exemplo da documentação:
def product_list (solicitação):
data = request.GET.copy ()
se 'página' em dados:
del data ['página']
f = ProductFilter (dados, queryset = Product.objects.all ())
return render_to_response ('my_app / template.html', {'filtro': f})
Espero ajudar.
Solução muito legal richardbarran, obrigado!
Obrigado. Pensei em corrigir a documentação para falar sobre django-pagination, mas estou com um pequeno problema: em que formato está a documentação? :-(
Não é o primeiro, como os docutils reclamam (pelo menos no meu computador). Alguma sugestão?
Richard, é o primeiro, mas precisa ser processado usando o sphinx (http://sphinx.pocoo.org/).
No momento em que uso a tag autopaginate, obtenho o erro de tipo "objeto do tipo 'fooFilter' não tem len ()". Tenho certeza de que obtive o resultado enurable, porque posso fazer um loop e exibir os objetos sem usar django-pagination. Como posso consertar isso? Obrigado!
Excelente, me economizou muito tempo, obrigado.
Você poderia me fornecer links do github para django-pagination e django-sorting que funcionam juntos, eu tentei alguns desses repositórios sem sucesso. Eu recebo um:
TemplateSyntaxError em / ads / search /
Variável capturadaDoesNotExist durante a renderização: falha na pesquisa da chave [objetos_classificados] em u '[{}, {\' csrf_token \ '...
usando este modelo
{% autosort filter.qs as sorted_objects %}
{% autopaginate sorted_objects 10 as object_list %}
{% for object in object_list %}
{{ object }}
{% endfor %}
{% paginate %}
<ul>
<li>{% anchor price "First Field" %}</li>
<li>{% anchor surface "Other Field" %}</li>
</ul>
Obrigado !
Desculpe, não usei a classificação de django, então realmente não posso ajudar.
Boa sorte!
NB
Você poderia me fornecer links do github para django-pagination e django-sorting que funcionam juntos, eu tentei alguns desses repositórios sem sucesso. Eu recebo um:
TemplateSyntaxError em / ads / search /
Variável capturadaDoesNotExist durante a renderização: falha na pesquisa da chave [objetos_classificados] em u '[{}, {\' csrf_token \ '...usando este modelo
{% autosort filter.qs as sorted_objects %} {% autopaginate sorted_objects 10 as object_list %} {% for object in object_list %} {{ object }} {% endfor %} {% paginate %} <ul> <li>{% anchor price "First Field" %}</li> <li>{% anchor surface "Other Field" %}</li> </ul>
Obrigado !
então, aqui está um exemplo de requisitos de pip de trabalho para minha pergunta anterior:
filtro django == 0.5.3
django-pagination == 1.0.7
-e git: //github.com/lukeman/django-sorting.git#egg = django_sorting
Tente usar meu garfo:
https://github.com/camilonova/django-sorting
Alguém sabe se o uso de paginação e classificação com django-filter é possível usando visualizações genéricas? Vejo a partir desses exemplos que o método de exibição genérico não está sendo usado.
Se eu entendi sua pergunta, é possível, eu uso aqui: https://github.com/ouhouhsami/django-geoads/blob/master/geoads/views.py
Caso alguém esteja interessado, escrevi um substituto muito mais completo para django-sorting, chamado django-sorter: http://django-sorter.readthedocs.org/
Como parte do controle do rastreador de problemas, fecharei este. Já se passaram mais de 2 anos desde o último comentário.
Se alguém quiser enviar uma solicitação pull atualizando a documentação que mostra a integração com as soluções de paginação / classificação atuais, ficaria muito feliz em revisar, mas, com exceção disso, voltarei a isso na próxima vez que surgir _IRL_.
Espero que faça sentido.
Obrigado!!!
Comentários muito úteis
Muito, muito útil. Obrigada.