Django の paginate に GET パラメーター渡し機能を追加
paginate/pagination は、 Django core として標準ではいっています。ただ他のパラメーターを、次のページに引き継ぎたい場合には、一手間必要なようです。
StackOverFlow の 次の Question を参考に、思案してみました。
GET パラメーター引き継ぎ方法
template tag での解決方法が2種類のっていた。僕は後者が分かりやすかったので、そちらを使っています。
snippetサイト
こちらで紹介されてる snippet にて解決できるらしいです。
templatetags を用意
パラメーターを引き継ぎたいところは、こんなように記載。
{% load extra %}
...
<a href="?{% url_replace request 'page' paginator.next_page_number %}">
templatetagsフォルダの下に次のコードを extra.py として用意。
from django import template register = template.Library() @register.simple_tag def url_replace(request, field, value): dict_ = request.GET.copy() dict_[field] = value return dict_.urlencode()
template tag で GET QueryString を引き継ごうという内容です
動作条件としては、 RequestContext request instance が view から template に渡ってる必要があるとの事なので、動作しない時には、次のドキュメントなどを参考に対象ください(このあたり、詳細をまだ理解しきれてなく、説明できず。。。)
参考
ペジネータの詳細:
テンプレートタグの詳細:
ここだけ見てても、機能が多いなぁと関心するばかり。
paginateを使い回すときのTIPS:
include で一部を再利用って手軽で良いと思った。