Django-filter: Documente como django-filter funciona com django-pagination

Criado em 13 ago. 2009  ·  20Comentários  ·  Fonte: carltongibson/django-filter

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.

Comentários muito úteis

Muito, muito útil. Obrigada.

Todos 20 comentários

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

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!!!

Esta página foi útil?
0 / 5 - 0 avaliações