Technofara

Golangエンジニア!仕事で必要になって勉強した事とか、新しい事とか色々まとめたりを緩くやります。技術系と思考系だけにしておきます、

Play2.xのScala Templatesを使ったController&View(scala初心者)

conf/routesに、route設定を書く

GET     /show         controllers.TemplateController.show()

app/controllers/TemplateController.scalaを作成

package controllers
import play.api._
import play.api.mvc._
object TemplateController extends Controller {
  def show = Action {
    //果物名一覧
    val list = List[String]("lemon", "mikan", "budou", "ringo")
    
    //表示
    Ok(views.html.show("Hello Scala Templates!",list))                                                                                                                                                                      
  }
}

app/views/show.scala.htmlを作成

//views.html.showの第一引数を@messageに、第二引数を@userListに
@(message:String,userList:List[String])                                                                                                                                                                                       
@main("show scala templates") {
    <h1>@message</h1>
    <ul>
    @for(user <- userList) {
      <li><p>@user</p></li>
    }   
    </ul>
}

ここには、html,head,bodyは書かない。

play run

ブラウザで、以下のURLを開くと http://localhost:9000/show

Hello Scala Templates!

lemon

mikan

budou

ringo

と表示されます。 ソースコードを見てみると

<!DOCTYPE html>
<html>
    <head>
        <title>show scala templates</title>
        <link rel="stylesheet" media="screen" href="/assets/stylesheets/main.css">
        <link rel="shortcut icon" type="image/png" href="/assets/images/favicon.png">
        <script src="/assets/javascripts/jquery-1.9.0.min.js" type="text/javascript"></script>
    </head>
    <body>
    <h1>Hello Scala Templates!あ</h1>
    <ul>
      <li><p>lemon</p></li>
      <li><p>mikan</p></li>
      <li><p>budou</p></li>
      <li><p>ringo</p></li>
    </ul>
    </body>
</html>

さっき書かなかった、html,head,bodyが これは app/views/main.scala.html内の

@content

にさっき作ったshow.scala.htmlの内容が展開されているからである。

他の言語の、フレームワークでもレイアウトファイル、テンプレートファイルと同じで main.scala.htmlをレイアウトファイル show.scala.htmlをテンプレートファイルとしたからです。