Django-filter: Documenter le fonctionnement de django-filter avec django-pagination

Créé le 13 août 2009  ·  20Commentaires  ·  Source: carltongibson/django-filter

Ils fonctionnent tous les deux bien ensemble, il m'a fallu un certain temps pour le bricoler. Sur la base de l'exemple dans la doc :

{% 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 %}

La clé est que vous devez utiliser l'argument _as_ de la pagination.

Commentaire le plus utile

Très, très utile. Merci.

Tous les 20 commentaires

Très, très utile. Merci.

Je suggérerais de documenter également comment cela fonctionne avec le tri django. Malheureusement, django-sorting doit être effectué avant la pagination et ne prend pas en charge le mot-clé 'as', nous ne pouvons donc _pas_ faire quelque chose comme ceci :

{% autosort f.qs as actionlog %}
{% autopaginate actionlog 30 %}

Classé en amont sur http://github.com/directeur/django-sorting/issues/#issue/4.

Obtenez ce problème lorsque j'essaie ce qui précède.

http://code.google.com/p/django-pagination/issues/detail?id=59#c0

Des idées sur ce que cela pourrait être ?

Il y a un problème avec django-pagination : quand vous êtes, disons, à la page 5 et que vous appliquez un filtre, le filtre passe aussi la variable GET "page" , donc dans la page filtrée vous êtes déjà à la page 5, c'est faux . Existe-t-il un moyen d'exclure de l'url la variable utilisée par django-pagination lors de l'application d'un filtre ? J'espère que cela a du sens...

mdgart,

J'ai résolu le problème de la variable de page sur le client avec jQuery et la bibliothèque jQuery Back Button & Query (BBQ). Voir : 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>

Lorsque l'utilisateur clique sur un lien de filtre, javascript force le paramètre get de "page" à 1.

Dans mon exemple, tous mes filtres sont affichés sous forme de liens, situés dans un div avec un identifiant de "changelist-filter". Vous devrez modifier votre sélecteur jQuery le cas échéant.

J'espère que cela t'aides.

mdgart, jonathonadler,

J'ai résolu le problème de la variable de page d'une manière légèrement différente qui évite de dépendre de javascript : ne transmettez simplement pas le paramètre 'page' au FilterSet. Par exemple, basé sur l'exemple dans les docs :
def product_list (demande) :
données = request.GET.copy()
si 'page' dans data :
del données['page']
f = ProductFilter(data, queryset=Product.objects.all())
return render_to_response('my_app/template.html', {'filter': f})
J'espère aider.

Solution très soignée richardbarran, merci !

Merci. J'ai pensé à patcher la documentation pour parler de django-pagination, mais j'ai un petit problème : dans quel format est la documentation ? :-(
Ce n'est pas la première, comme docutils s'en plaint (du moins sur mon ordinateur). Aucune suggestion?

Richard, c'est le premier mais doit être traité avec sphinx (http://sphinx.pocoo.org/).

Au moment où j'utilise la balise autopaginate, j'obtiens une erreur de type "objet de type 'fooFilter' n'a pas de len()". Je suis sûr d'avoir le résultat enurable, car je peux le parcourir en boucle et afficher les objets sans utiliser django-pagination. Comment puis-je résoudre cela? Merci!

Excellent, j'ai gagné beaucoup de temps merci.

Pourriez-vous me donner des liens github vers django-pagination et django-sorting qui fonctionnent ensemble, j'ai essayé certains de ces référentiels sans succès. J'ai un :

TemplateSyntaxError dans /ads/search/
La variable capturée n'existe pas lors du rendu : échec de la recherche de la clé [objets_triés] dans u'[{}, {\'csrf_token\' ...

en utilisant ce modèle

    {% 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>

Merci !

Désolé, je n'ai pas utilisé le tri django donc je ne peux pas vraiment aider.

Bonne chance!

NB

Pourriez-vous me donner des liens github vers django-pagination et django-sorting qui fonctionnent ensemble, j'ai essayé certains de ces référentiels sans succès. J'ai un :

TemplateSyntaxError dans /ads/search/
La variable capturée n'existe pas lors du rendu : échec de la recherche de la clé [objets_triés] dans u'[{}, {\'csrf_token\' ...

en utilisant ce modèle

  {% 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>

Merci !

donc, voici un exemple d'exigences de pip de travail pour ma question précédente:

django-filtre==0.5.3
django-pagination==1.0.7
-e git://github.com/lukeman/django-sorting.git#egg =django_sorting

Essayez d'utiliser ma fourchette :
https://github.com/camilonova/django-sorting

Est-ce que quelqu'un sait si l'utilisation de la pagination et du tri avec django-filter est possible en utilisant des vues génériques ? Je vois à partir de ces exemples que la méthode de vue générique n'est pas utilisée.

Si je comprends votre question, c'est possible, je l'utilise ici : https://github.com/ouhouhsami/django-geoads/blob/master/geoads/views.py

Au cas où quelqu'un serait intéressé, j'ai écrit un remplacement beaucoup plus complet de django-sorting, appelé django-sorter : http://django-sorter.readthedocs.org/

Dans le cadre de l'amélioration du suivi des problèmes, je vais fermer celui-ci. Cela fait plus de 2 ans depuis le dernier commentaire.

Si quelqu'un souhaite envoyer une demande d'extraction mettant à jour la documentation montrant l'intégration avec les solutions de pagination/tri actuelles, je serais très heureux de l'examiner, mais à part cela, j'y reviendrai la prochaine fois qu'il apparaîtra _IRL_.

J'espère que cela à du sens.

Merci!!!

Cette page vous a été utile?
0 / 5 - 0 notes