Playframework 2.0 将可重用块从一个模板包含到另一个模板中

Playframework 2.0 将可重用块从一个模板包含到另一个模板中,playframework-2.0,Playframework 2.0,我想在我的另一个模板中使用模板中的可重用块。我该怎么做?更具体地说: 我有一个包含此标记的模板views/main.scala.html @logo_header = { <div id="logo-container"> ... </div> } @logo\u头={ ... } a我有另一个模板views/errors/notFound.scala.html,其中我希望包含主模板中的logo_头标记。我尝试使用@main.logo\u

我想在我的另一个模板中使用模板中的可重用块。我该怎么做?更具体地说:

我有一个包含此标记的模板views/main.scala.html

@logo_header = {
    <div id="logo-container">
       ...
    </div>
}
@logo\u头={
...
}
a我有另一个模板views/errors/notFound.scala.html,其中我希望包含主模板中的logo_头标记。我尝试使用@main.logo\u header或@main.logo\u header(),但编译器总是说:

值logo_头不是object views.html.main的成员


我查看了他们描述的官方文档,但我不明白为什么它不起作用。

您做了一些与文档中提到的用法略有不同的事情。在文档中,可重用标记在其自己的文件中声明。您要做的是在一个视图模板中声明一个helper函数,然后尝试从另一个模板调用它。如中所述,函数仅对声明它的视图模板可见

您需要做的是将徽标标题标记移出到自己的文件中:

查看/u logo\u header.scala.html

<div id="logo-container">
   ...
</div>
<html>
    ...
    _logo_header
    ...
</html>
@(arg1: String, arg2: String)
<div id="logo-container">
   ...
</div>
<html>
    ...
    _logo_header("foo", "bar")
    ...
</html>

...
然后参考如下:

views/main.scala.html

<div id="logo-container">
   ...
</div>
<html>
    ...
    _logo_header
    ...
</html>
@(arg1: String, arg2: String)
<div id="logo-container">
   ...
</div>
<html>
    ...
    _logo_header("foo", "bar")
    ...
</html>

...
_标志头
...
我给这个新文件起了一个带有前导下划线的名称,因为这是一种常见的命名约定,它将文件标记为包含HTML片段,而不是完整的HTML文档

最后,我假设您的徽标标题片段不需要接受任何参数。如果有,您可以添加一些Scala,如文档中所述:

查看/u logo\u header.scala.html

<div id="logo-container">
   ...
</div>
<html>
    ...
    _logo_header
    ...
</html>
@(arg1: String, arg2: String)
<div id="logo-container">
   ...
</div>
<html>
    ...
    _logo_header("foo", "bar")
    ...
</html>
@(arg1:String,arg2:String)
...
views/main.scala.html

<div id="logo-container">
   ...
</div>
<html>
    ...
    _logo_header
    ...
</html>
@(arg1: String, arg2: String)
<div id="logo-container">
   ...
</div>
<html>
    ...
    _logo_header("foo", "bar")
    ...
</html>

...
_徽标_标题(“foo”、“bar”)
...

因此,基本上,当我需要模板的可重用html组件(页眉、页脚、徽标)时,我必须为每个组件创建自己的模板???@Behnil-是的,据我所知。谢谢@avik。我还有最后一个问题。视图/标记文件夹有什么特别之处吗?或者他们只是在文档中选择了它?不,它不是特别的。所有视图模板都需要放入
视图
包中,但在
视图
下面,您可以定义子包并按照自己的选择组织模板。但在示例中,它们调用@common.sideBar(),而不是@common(某物),因此在我看来,它们调用common的函数。