Django – DTL – 変数展開

概要

Djangoのテンプレート内での変数展開は{{ 変数 }}と記述。

  • 単純変数はそのまま内容が展開される
  • コレクションはリスト、タプル、辞書に応じた表現になる
  • コレクションの要素は[]ではなくドット(.)で添字やキーを指定
  • オブジェクトの属性やメソッドもドット(.)で指定

単純変数

単純変数の展開の例を以下に示す。まずview関数。

テンプレートの変数展開部分。

ブラウザーの表示。

単純変数

  • 実数値:3.1415
  • 文字列:ABCDいろはに

 

コレクション

コレクションを参照する変数を展開すると、変数をprint文でコンソール出力した時の形式で展開される。

テンプレートの変数展開部分。

ブラウザーの表示。

コレクション

  • リスト:[‘one’, 2, [3, ‘three’]]
  • タプル:(‘one’, 2, (3, ‘three’))
  • 辞 書:{‘one’: 1, ‘two’: 2, ‘three’: 3}

 

コレクションの要素を展開する場合、Pythonの[]と違ってドット(.)に続けて添字の数値やキーの文字列をそのまま書く。

多次元の場合には、次数に対応して連ねていく。

コレクション全体と同じ例で要素を表示したいときのテンプレートの例。

ブラウザーの表示。

コレクションの要素

  • リストの要素:one, 2, 3, three
  • タプルの要素:one, 2, 3, three
  • 辞書の要素 :1, 2, 3

オブジェクト

クラスのインスタンスを参照する変数も展開できる。以下はviews.pyで単純なクラスを定義して、そのインスタンスをテンプレートに渡している。

 

テンプレートでのオブジェクトの展開は、以下の3種類となる。

  • オブジェクト全体を展開すると、オブジェクトが文字列にキャストされた表現となる
  • オブジェクトの属性は、変数と属性名をドット(.)で繋いで得られる
  • オブジェクトとメソッド名をドット(.)で繋ぐと、メソッドの実行結果が得られる

ブラウザーでの表示。

オブジェクト

  • オブジェクト全体:<dtldemo.views.BinaryOperation object at 0x7fdf2835ec50>
  • オブジェクトの属性:2, 3
  • オブジェクトのメソッド:5

フィルター

基本形

フィルターはテンプレート中の変数を加工するもので、Djangoによる組み込みフィルターが多数用意されている。フィルターの基本形は以下のとおり。

{{ 変数|フィルター }}

わかりやすい例としては、変数の文字列の文字数を返すlengthがある。以下のテンプレートでは、var_stringに格納されている文字列とその文字数を表示している。

変数の内容が'abcd'の場合、表示は以下のようになる。

引数

フィルターには引数を持つものもある。引数はリテラルとする必要がある。

{{ 変数|フィルター:引数 }}

以下の例はaddフィルターで、元の変数の内容に引数の内容を加える。

var_two=2var_string='abcde'の場合、表示は以下のようになる。

チェーン

フィルターのチェーンによって、複数のフィルターを作用させることができる。

{{ 変数|フィルター[:引数]|フィルター[:引数] ... }}

以下の例では変数の文字列に文字列定数を連結した上で文字数を得ている。

var_string='abcde'の場合、結果は’8'となる。

スペースとエラー

'|'':'の前後にスペースを入れても問題ないが、タグ({% ... %})でフィルターを使う場合にはエラーとなる場合がある

紛らわしいので、「フィルターを使うときは間のスペースなし」と決めておく方がよい。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です