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 }}
コメント