9

私は次のように私のウェブサイトの構造を計画しています:

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

これで、「xxx」の代わりに特定のページ(つまり、「UsersView.scala.html」)が​​必要になります。
私が必要としているのは、(よく知られている言語のように)フッターのソースとヘッダーを中央のページのコードに含めることです。

だから私の質問は:

  1. Scalaテンプレートを使用して別のページにページを含めるにはどうすればよいですか?
  2. Playの良いパラダイムだと思いますか?フレームワークベースのウェブサイト?
4

3 に答える 3

33

メソッドのような別のテンプレートを呼び出すだけです。footer.scala.htmlを含めたい場合:

@footer()

于 2012-08-11T04:26:30.827 に答える
15

一般的なパターンは、ボイラープレートを含み、HTMLタイプのパラメーターを受け取るテンプレートを作成することです。まあ言ってみれば:

main.scala.html

@(content: HTML)

@header
// boilerplate

@content

// more boilerplate
@footer

実際、このアプローチではヘッダーとフッターを分離する必要はありません。

UsersView.scala.htmlは次のようになります。

@main {

// all your users page html here.

}

UsersViewをパラメーターとして渡すことにより、mainでラップしています。

サンプルでこの例を見ることができます

私の通常のメインテンプレートはもう少し複雑で、おおよそ次のようになります。

@(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>

このようにして、テンプレートはヘッドインサートとタイトルを渡し、ユーザーを利用可能にすることができます。もちろん、コンテンツも同様です。

于 2012-08-01T17:02:17.407 に答える
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>

}

詳細はこちら

于 2015-12-29T15:39:17.913 に答える