2010-08-19 5 views
0

J'ai un tableau HTML qui énumère un tas d'entrées. Je veux que les en-têtes de colonne soient cliquables pour être triés. Le problème est, j'ai déjà un tas de filtres dans l'URL (des choses comme ?min_price=200&max_price=6000). Comment puis-je construire le lien de telle sorte qu'il garde ces paramètres intacts? Y a-t-il une fonction pour cela? Dois-je le faire dans la vue?Faire un lien qui maintient get params?

Répondre

1

est ici un truc mignon j'ai trouvé que pourrait faire ce que vous voulez: http://andrewwilkinson.wordpress.com/2009/02/03/using-django-forms-for-get-urls/

Personnellement, je ne voudrais pas le faire de cette façon. J'utiliserais Javascript et changerais le DOM directement. Vous n'ajoutez ou ne supprimez aucune donnée si vous ne faites que trier. Si vous changez simplement le DOM, vous éviterez peut-être d'appeler le serveur, et l'expérience utilisateur sera meilleure car vous n'aurez pas besoin de recharger l'écran.

+0

Sauf que c'est multi-page. JS ne fonctionnera pas. – mpen

+0

Aussi ... le lien que vous avez fourni .. Je ne suis pas sûr comment l'encodage d'URL d'un formulaire est même pertinent? Si ce que vous voulez vraiment dire est "copiez le dict GET, ajoutez votre paramètre de tri, puis utilisez urllib pour l'urlencode" alors peut-être vous avez une réponse. – mpen

+0

Avez-vous vu jqgrid? http://www.trirand.com/blog/ C'est un widget grille assez sophistiqué. Il a la pagination dynamique et le tri. – jfenwick

1

Dans votre modèle, vous pouvez ajouter:

your_current_url?{{ request.META.QUERY_STRING }} 

pour passer les params chaîne de requête en cours sur d'autres liens.

Espérons que ça aide!

+0

... en supposant bien sûr que vous utilisez le processeur de contexte de demande ... –

+0

Nice. J'ai appris quelque chose aujourd'hui :) Aussi, attention à ceci lors de l'utilisation GET: http://stackoverflow.com/questions/266322/http-uri-get-limit – jfenwick

+0

Je pensais que c'était implicite, mais je suppose que non. Cliquer sur les en-têtes ajouterait quelque chose comme un paramètre 'sort_by'. Avec votre solution, en cliquant sur un en-tête, puis un autre continuerait à ajouter des paramètres 'sort_by'. Il doit être remplacé donc il n'y a pas de dupes. – mpen

Questions connexes