テンプレートエンジンを利用して作るviewには、2種類※ある模様です!
1つはレイアウトを決めるテンプレート用のview。たとえばmain.scala.htmlなど。
この記事では、仮にレイアウトviewと呼びます。
1つはレイアウトに流し込む中身を定義するview。tiles的な存在。たとえばindex.scala.htmlなど。
仮にタイルパーツviewと呼びます。
命名規則による両者の識別はとくになさそう。
もしレイアウトが複数あるなら、ちゃんと命名規則をプロジェクトごとに作ったほうがいいと思う。
呼び出し関係は、
コントローラー ⇒ タイルパーツview ⇒ レイアウトview
基本的には、このようになっています。
目次
テンプレートエンジンの基本的な使い方
まずは基本形から。
main.scala.html(レイアウトview)
@***************************************************
* テンプレート引数の名前は、なんでもOK。
* このテンプレートを呼び出すファイル側と引数名が
* 違ってもOK。
***************************************************@
@(title: String)(arg1: Html)(arg2 :Html)(arg3 : Html)
[/java]
views > index.scala.html(パーツview)
@********************************************
hikisu1はテンプレート引数なので、このパーツview
(index.scala.html)をコントローラークラスから呼ぶ
タイミングで指定する必要がある。
ex. ok(index.render(“引数1”));
********************************************@
@(hikisu1 : String)
@********************************************
hikisu2,3はレイアウトview(main.scala.html)で
指定されているmainのテンプレート引数です。
********************************************@
@hikisu2 = {引数2}
@hikisu3 = {
引数3
}
@********************************************
「@main」の部分にはファイル名が来なくてはならない。
下記の場合は、views > main.scala.htmlという指定を意味する。
********************************************@
@main(hikisu1)(hikisu2)(hikisu3){
ここはmain.scala.htmlの最後のテンプレート引数でなくては
ならない
よって、ここだけは(hikisu3)の後ろに(hikisu4)みたいに仮引数
として指定できない。
{ }のブロックで囲まれた形式で指定しなくてはならない。
}
[/java]
念のためコントローラークラスも
public static Result index() {
return ok(index.render(“引数1”));
}
[/java]
出力されるHTML
引数2
引数3
ここはmain.scala.htmlの最後のテンプレート引数でなくては
ならない
よって、ここだけは(hikisu3)の後ろに(hikisu4)みたいに仮引数
として指定できない。
{ }のブロックで囲まれた形式で指定しなくてはならない。
[/java]
変則的な特徴
王道ではないけど、一応コンパイル通る方法も紹介します。
views > index.scala.html(パーツview)
ここで文字書くとbodyタグの開始直後に表示されてしまう!
正しくない使い方
@main(hikisu1){
{}で指定されている引数2
}(hikisu3){
ここはmain.scala.htmlの最後のテンプレート引数でなくては
ならない
}
@hikisu3 = {
@mainよりも後ろで宣言してもOK。引数3
}
ここで文字書くとbodyタグの最後に表示されてしまう!正しくない使い方[/java]
出力されるHTML
ここで文字書くとbodyタグの開始直後に表示されてしまう!
正しくない使い方
{}で指定されている引数2
@mainよりも後ろで宣言してもOK。引数3
ここはmain.scala.htmlの最後のテンプレート引数
でなくてはならない
ここで文字書くとbodyタグの最後に表示されてしまう!
正しくない使い方