djangoのテンプレートで辞書にアクセスするときにキーを変数で指定する方法

django

djangoのテンプレートで辞書にアクセスする際に以下のように指定したらTemplateSyntaxErrorになってしまった。

{{ dict['key'] }}

正しくは以下のようにする必要がある。

{{ dict.key1 }}

しかし、これではキー変数で指定したい場合はアクセスできない。
何か方法はないか調べたところdjangoのCustom Filterという機能を使えばなんとかなるようだ。

早速、Custom Filterを作成する

というわけでCustom Filterを作成したいがそのまえにmanage.py startappで作成されたフォルダに新たにtemplatetagsフォルダを作成する。そして、作成したフォルダに以下のようなファイルを作成する。

from django.template import Library
register = Library()

@register.filter
def get_value(value, key):
    if (key in value.keys()):
        return value[key]
    else:
        return None

あとはテンプレートで読み込んで指定するだけ

Custom Filterの作成が済んだら、テンプレートで以下のように指定すればよい

{{% load <Custom Filterのファイル名> %}}
{{ dict|<Custom Filterで定義した関数名(例だとget_value)>:key1 }}

コメント

タイトルとURLをコピーしました