mathpython thesaurus

広告

Djangoのページ機能:GETのパラメーターをテンプレートタグでうまく管理する

Djangoでページ機能をつける場合、pageはurlのクエリからとってくる。取得そのものは簡単だが、ページ遷移した時、クエリがどんどんつながってしまうという問題がある。

http://127.0.0.1:8000/search?filter=post&query=&page=1&page=2&page=3&page=4

遷移するたびにpageクエリがつながってしまうのだ。これをなんとかするにはテンプレートタグを使う。

結論

ページそのものは次のようにする。

<ul class="pagination">
    {% if posts.has_previous %}
        <li>
            <a href="?{% url_replace request 'page' posts.previous_page_number %}">
                前へ
            </a>
        </li>
    {% endif %}
    {% if posts.has_next %}
        <li>
            <a href="?{% url_replace request 'page' posts.next_page_number %}">
                次へ
            </a>
        </li>
    {% endif %}
</ul>

テンプレートタグは次のようにする。

@register.simple_tag
def url_replace(request, field, value):
    dict_ = request.GET.copy()
    dict_[field] = value
    return dict_.urlencode()

メモ

上のpostsはフィルターをかけたオブジェクトリストをページクラスに入れた後のオブジェクトリスト。

広告

広告