玩!框架。模板“包括”

时间:2012-08-01 16:48:53

标签: java scala web playframework-2.0 web-development-server

我正在计划我的网站结构如下:

  
      
  • header.scala.html
  •   
  • XXX
  •   
  • footer.scala.html
  •   

现在,应该有一个特定的页面(即“UsersView.scala.html”),而不是“xxx”。
我需要的是包括(如知名语言)页脚的来源和 标题插入中间页面的代码。

所以我的问题是:

  1. 如何使用scala模板在另一个页面中包含页面?
  2. 你认为这是Play的好范例吗?基于框架的网站?

3 个答案:

答案 0 :(得分:31)

只需像方法一样调用另一个模板。如果您想包含 footer.scala.html

@footer()

答案 1 :(得分:13)

一种常见的模式是创建一个包含样板的模板,并采用HTML类型的参数。让我们说:

main.scala.html

@(content: HTML)

@header
// boilerplate

@content

// more boilerplate
@footer

事实上,您并不需要使用这种方法来分隔页眉和页脚。

您的UsersView.scala.html然后如下所示:

@main {

// all your users page html here.

}

您将UsersView作为参数传递给主页包装。

您可以在samples

中查看相关示例

我通常使用的主要模板更具参与性,看起来大致如下:

@(title: String)(headInsert: Html = Html.empty)(content: Html)(implicit user: Option[User] = None)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <title>@title</title>
  // bootstrap stuff here
  @headInsert
</head>
<body>
  @menu(user)
  <div id="mainContainer" class="container">  
    @content
  </div>

</body>
</html>

通过这种方式,模板可以传入头部插入和标题,并使用户可用,当然还有内容。

答案 2 :(得分:2)

Play提供了一种非常方便的方法来帮助实现它!

官方文档的布局部分:

首先我们有一个base.html(我们在django -_-中调用)

// views/main.scala.html
@(title: String)(content: Html)
<!DOCTYPE html>
<html>
  <head>
    <title>@title</title>
  </head>
  <body>
    <section class="content">@content</section>
  </body>
</html>

如何使用base.html?

@main(title = "Home") {

  <h1>Home page</h1>

}

更多信息here