読者です 読者をやめる 読者になる 読者になる

AWS / PHP / Python ちょいメモ

amazon web service , PHP, Python を使ったときのメモ。日本語でググってもわからなかった事を中心に。

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 で一部を再利用って手軽で良いと思った。