socksocket socksocket - 5 months ago 34
Scala Question

Play! framework. template "include"

I'm planning my website structure as following:

  • header.scala.html

  • XXX

  • footer.scala.html

now, instead of "xxx" there should be a specific page (i.e. "UsersView.scala.html").

what I need is to include (like with well-known languages) the source of the footer and the
header into the the middle page's code.

so my questions are:

  1. How do you include a page in another with scala templating?

  2. Do you think it's a good paradigm for Play! framework based website?


A common pattern is to create a template that contains the boilerplate, and takes a parameter of type HTML. Let's say:


@(content: HTML)

// boilerplate


// more boilerplate

In fact, you don't really need to separate out header and footer with this approach.

Your UsersView.scala.html then looks like this:

@main {

// all your users page html here.


You're wrapping the UsersView with main by passing it in as a parameter.

You can see examples of this in the samples

My usual main template is a little more involved and looks roughly like this:

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


This way a template can pass in a head insert and title, and make a user available, as well as content of course.