Djangoで現在のクエリパラメーターを維持しつつ特定のパラメーターだけ更新する方法です。
例
?type=1&page=1
というURLのページで ?type=1&page=2
や ?type=2&page=1
というリンクを作ります。
他のクエリパラメーターの値は維持しつつもページネーションの数字だけ変えたい場面で使えます。
実装
独自のテンプレートタグを作ります。
app/templatetags/paginator.py
from django import template
register = template.Library()
@register.simple_tag
def url_replace(request, field, value):
"""指定されたパラメーターの値を更新する.
"""
dict_ = request.GET.copy()
dict_[field] = value
# valueにNoneが指定された場合は、fieldをクエリパラメーターから削除する.
if value is None:
dict_.pop(field)
return dict_.urlencode()
テンプレート側からタグを呼び出します。
sample.html
<!-- テンプレートタグをロード(テンプレートタグを定義したファイル名に対応) -->
{% load paginator %}
<!-- 現在いるURLのクエリパラメーターをpage=100に変えたパスを作る。(page以外のパラメーターの値はそのまま) -->
<a href="?{% url_replace request 'page' 100 %}">100</a>
<!-- pageパラメーターを無くしたい時 -->
<a href="?{% url_replace request 'page' None %}">1</a>