【Python・Django】URLのパラメータ(数値)を元にテンプレートの表示を制御する

【Python・Django】URLのパラメータ(数値)を元にテンプレートの表示を制御する


# django # python

環境

Python:3.65 Django:2.1

templateでGETパラメータを使って制御する方法

使用例

GETパラメータにオブジェクトのIDや準ずる数値データを私、それに基づいて強調表示を行う場合に必要になるかと思います。 具体的には、自分の投稿だけ強調表示したい、おすすめ記事を同定期に目立たせたいなどがぱっと思いつきます。

IDに限らず、Djangoのテンプレートで数値パラメータを使用する際は、このような配慮が必要となります。

URL例

問題となる可能性があるのは、以下のようにGETパラメータの値が数値となっている場合です。 https://tkkm.tokyo/?param=5

以下のように文字列となっている場合は、特に意識せずに普通に値を取得して使用すればokです。 https://tkkm.tokyo/?param=hoge

(念の為ですが、PythonはJavaScriptなどとは異なり、“1” != 1 です。異なる型の際は同一とみなしません。)

templateでの記述

結論としては以下のような記述をすればokです。

{% if request.GET.id == obj.id|stringformat:"d" %}
 <a class="fuga" href="#">hoge</a>
{% else %}
 <a href="#">hoge</a>

GETリクエストの情報は、request.GET.パラメータ名として格納されています。 しかし、値が明らかに数値の場合もすべて文字列型として格納されています。 (この時に初めてDjangoはtempleteで使用する際も型の意識が必要だということを知りました…) そのため、取得したパラメータに対し、 「stringformat:“d”」 を適用して明示的に数値型に変換する必要があります。

参考

https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#stringformat

しかしPyCharmのデバッグ機能は便利ですね。これなしにはもう戻れなさそう…