2017-09-03 13 views
1

ジャンゴ1.11.4ページネーションとgetパラメータ

私は= "GET" メソッドを検索フォームを構築しています。 検索フォームには多数のフォームがあります。 この入力値は、URLの取得パラメータとして送信されます。

ページネーションを取得する方法が問題です。データベースには何千ものオブジェクトが含まれています。ページネーションが必要です。

https://docs.djangoproject.com/en/1.11/topics/pagination/#using-paginator-in-a-view

それは次のように提案する:

<a href="?page={{ contacts.previous_page_number }}">previous</a> 

しかし、これはすべてのGETパラメータを台無しにする

これは、ドキュメントを教えてくれるものです。

私は何を発明するために管理していることである。

<a href="{{ request.get_full_path }}&page={{ object_list.previous_page_number }}">previous</a> 

これは動作します。しかしこれはうんざりです。ページを前後に切り替えると、次のようなURLが生成されます。

page=2&page=3&page=2 

Googleがこの問題をどのように管理しているかを見てきました。 URLの真ん中には、開始= 30があります。このパラメータを変更するには、start = 20、start = 40とします。だから、彼らは切り替える。

Djangoでパラメータを保持してページを切り替える方法を理解できたら助かりますか?もちろん、エレガントな方法で。

+0

は、私は、この目的のためのGithub上で再利用するテンプレートタグを持っている:https://gist.github.com/benbacardi/d6cd0fb8c85e1547c3c60f95f5b2d5e1 – Ben

答えて

1

通常、GETパラメータを保持するには、手動で簡単に書き直すだけです。これをやらなければならないことが重要なケースは多くないはずです。

&page={{page}}&total={{total}} 

これをテンプレートインクルードまたはカスタムテンプレートタグに抽象化することができます。

https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/

また、あなたは文字列だけでなく、変更したい値の辞書としてのURLのparamsをとり、文字列フィルタを作成することができます。フィルタはparams文字列を解析し、値を更新した後、文字列をURLパラメータに再結合することができます。

{{ request.get_full_path | update_param:'page=8' }} 
関連する問題