Play中的部分视图存在吗?

时间:2014-01-06 03:25:47

标签: scala playframework playframework-2.2

我没有在Play Framework中发现任何部分视图的概念,类似于Ruby on Rails的部分视图。例如,如果有layouts/main.scala.html布局:

@(title: String)(content: => Html)(implicit flash: Flash)
<!DOCTYPE html>
<html>
    <head>
        <title>@title</title>

    </head>
    <body>
        <section class="content">@content</section>
    </body>
</html>

还有layouts/_footer.scala.html“部分”,如何将_footer加入main? Play中有类似内容吗?

3 个答案:

答案 0 :(得分:17)

我认为RoR的部分观点过于复杂。关于Play模板要记住的事情,因为它们本质上只是可以直接从Scala代码调用的函数。而且,Play模板本质上是Scala代码。这意味着,可以从其他Play模板调用Play模板。因此,只需创建另一个名为footer.scala.html的模板,例如:

<footer>
   Powered by Play Framework
</footer>

然后从主模板中调用它,就像调用任何其他Scala函数一样:

@(title: String)(content: => Html)(implicit flash: Flash)
<!DOCTYPE html>
<html>
    <head>
        <title>@title</title>
    </head>
    <body>
        <section class="content">@content</section>
        @footer()
    </body>
</html>

再好不过了。

答案 1 :(得分:0)

不确定您是使用Play 1.x还是2,但在Play 1中,有模板标签 - 请参阅http://www.playframework.com/documentation/1.2.7/templates#inheritance

答案 2 :(得分:0)

我认为@Vidya想要说的是你可以这样做:

在main.scala.html中,我们添加一个名为footer的变量,其类型为Html,默认值为empty:

   @(title: String, footer: Html = Html(""))(content: Html)

    <!DOCTYPE html>

    <html>
        <head>
            <title>@title</title>
        </head>
        <body>
            @content
            @footer
        </body>
    </html>

然后在像index.scala.html这样的页面中,我们可以执行以下操作:

@(message: String)

@footer = {
    <footer>the footer!</footer>
}

@main("Welcome", footer) {
    the content!
}