Common use cases

    让我们来声明一个 模板来作为主要的布局模板:

    正如你所见,这个模板接收两个参数:标题(title)和 HTML 内容块(content)。下面我们在另一个模板(views/Application/index.scala.html)中使用它:

    1. @main(title = "Home") {
    2. <h1>Home page</h1>
    3. }
    1. @(title: String)(sidebar: Html)(content: Html)
    2. <!DOCTYPE html>
    3. <html>
    4. <head>
    5. <title>@title</title>
    6. </head>
    7. <body>
    8. <section class="sidebar">@sidebar</section>
    9. <section class="content">@content</section>
    10. </body>
    11. </html>

    在我们的 index 模板中使用:

    或者,我们可以单独声明侧边栏:

    1. @sidebar = {
    2. <h1>Sidebar</h1>
    3. }
    4. @main("Home")(sidebar) {
    5. <h1>Home page</h1>
    6. }

    下面我们来写一个简单的标签 ,用于显示 HTML 通知:

    1. @level match {
    2. case "success" => {
    3. <p class="success">
    4. @body("green")
    5. </p>
    6. }
    7. case "warning" => {
    8. <p class="warning">
    9. @body("orange")
    10. </p>
    11. }
    12. case "error" => {
    13. <p class="error">
    14. @body("red")
    15. </p>
    16. }
    17. }

    同样没有任何特别之处,你可以调用任意其它模板(事实上可以调用任意地方的任意函数):

    1. <h1>Home</h1>
    2. <div id="side">
    3. @common.sideBar()
    4. </div>

    想在 Scala 模板中定义 moreScripts 和 moreStyles 等价物(像在 Play! 1.x 那样),你只需像下面那样在主模板中定义一个变量:

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>@title</title>
    5. <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
    6. <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
    7. <script src="@routes.Assets.at("javascripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
    8. @scripts
    9. </head>
    10. <body>
    11. <div class="navbar navbar-fixed-top">
    12. <div class="navbar-inner">
    13. <div class="container">
    14. <a class="brand" href="#">Movies</a>
    15. </div>
    16. </div>
    17. </div>
    18. <div class="container">
    19. @content
    20. </div>
    21. </body>
    22. </html>

    对于一个需要额外脚本的扩展模板,用法如下:

    1. @main("Title"){
    2. Html content here ...