django ラブなので、最近は テンプレートの継承 ができないとストレスがたまって仕方ありません。
phpのframeworkで rhaco というのがあるのですが、私がいろいろ五月蠅く言うので、継承に似た仕組みが用意されています。
この 似た仕組み というのが結構面白いです。
djangoは継承なのですが、rhacoの作者はdjangoをよく知らないので(知っていてもそうしたかもしれませんが)継承というよりはプロトタイプ的なものになっています。
継承もプロトタイプも甲乙つけがたく、是非両方を味わってみて欲しい所です。
以下、図で説明します。
djangoの場合はテンプレートの継承
「い」というベースになるテンプレートにブロックと呼ばれるマーカーで切り替わる部分を指定します(A/B/C)。
ベースのテンプレート「い」と違う部分を表現したい時には「ろ」のようにブロックを定義したテンプレートで親テンプレートに「い」を指定します(実際はテンプレートに継承のタグを記述します)。
「ろ」をレンダリングすると「は」ができあがります。
「は」と少し違う表現をしたい時には「に」テンプレートで親テンプレートに「ろ」を指定します。継承のカスケードです。できあがりは「へ」になります。
rhacoの場合はテンプレートに対してブロックを重ねる
「い」というベースのテンプレートにブロックと呼ばれるマーカーで切り替わる部分を指定します(A/B/C)。
ベースのテンプレート「い」と違う部分を表現したいときには「ろ」のようにブロックを定義したテンプレートをブロック追加します(実際はロジックでテンプレートのレンダリングをする前にaddBlockTemplateというメソッドでブロックテンプレートを挿入します)。
「ろ」をブロック追加した後に「い」のテンプレートをレンダリングすると「は」ができあがります。
「は」と少し違う表現をしたいときには「い」に対して「ろ」と「に」をブロック追加します。ブロックの動的付け替えです。できあがりは「へ」になります。
方法は違いますが、テンプレートの記述量や全体のイメージの変更のしやすさはほぼ同等です。
jeff croftのように(djangoのように?)基本的にはコードを書かない(actionを書かない)場合には 継承の力 が、コードを書く他のフレームワークではプロトタイプの馴染みやすさが、受けるのかもしれません。
phpを使わざるを得ないときは、rhacoがいいです。あ、「ほ」が無いことに何の意味もありません。