COBAKURA.COM

Django 特定のクエリパラメーターだけを更新するリンクの作り方

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>

おすすめ記事

2023/7/5

Django OneToOneFieldが存在するかをチェックする方法