テンプレートの継承とプロトタイプ

2006/05/09 13:41

※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】

django ラブなので、最近は テンプレートの継承 ができないとストレスがたまって仕方ありません。

phpのframeworkで rhaco というのがあるのですが、私がいろいろ五月蠅く言うので、継承に似た仕組みが用意されています。

この 似た仕組み というのが結構面白いです。

djangoは継承なのですが、rhacoの作者はdjangoをよく知らないので(知っていてもそうしたかもしれませんが)継承というよりはプロトタイプ的なものになっています。

継承もプロトタイプも甲乙つけがたく、是非両方を味わってみて欲しい所です。

以下、図で説明します。

djangoの場合はテンプレートの継承

「い」というベースになるテンプレートにブロックと呼ばれるマーカーで切り替わる部分を指定します(A/B/C)。

ベースのテンプレート「い」と違う部分を表現したい時には「ろ」のようにブロックを定義したテンプレートで親テンプレートに「い」を指定します(実際はテンプレートに継承のタグを記述します)。

「ろ」をレンダリングすると「は」ができあがります。

「は」と少し違う表現をしたい時には「に」テンプレートで親テンプレートに「ろ」を指定します。継承のカスケードです。できあがりは「へ」になります。

rhacoの場合はテンプレートに対してブロックを重ねる

「い」というベースのテンプレートにブロックと呼ばれるマーカーで切り替わる部分を指定します(A/B/C)。

ベースのテンプレート「い」と違う部分を表現したいときには「ろ」のようにブロックを定義したテンプレートをブロック追加します(実際はロジックでテンプレートのレンダリングをする前にaddBlockTemplateというメソッドでブロックテンプレートを挿入します)。

「ろ」をブロック追加した後に「い」のテンプレートをレンダリングすると「は」ができあがります。

「は」と少し違う表現をしたいときには「い」に対して「ろ」と「に」をブロック追加します。ブロックの動的付け替えです。できあがりは「へ」になります。

方法は違いますが、テンプレートの記述量や全体のイメージの変更のしやすさはほぼ同等です。

jeff croftのように(djangoのように?)基本的にはコードを書かない(actionを書かない)場合には 継承の力 が、コードを書く他のフレームワークではプロトタイプの馴染みやすさが、受けるのかもしれません。

phpを使わざるを得ないときは、rhacoがいいです。あ、「ほ」が無いことに何の意味もありません。

2006/11/02 18:49 by makoto
rhaco0.93からrhacoでも継承がサポートされました。

Prev Entry

Next Entry