【问题标题】:include scala.html files in play 2.0 scala在 play 2.0 scala 中包含 scala.html 文件
【发布时间】:2023-03-30 22:58:02
【问题描述】:

我正在尝试使用 scala 学习 Play 2.0,但我认为我不太了解 play 2.0 的模板系统是如何工作的。我之前使用过 play 1.2,我正在寻找与 #{include 'views/blah.html' /} 等效的版本。我本质上想创建一个在所有页面上呈现的导航栏。

基本上在 main.scala.html 我有

@(title: String)(navbar: Html)(content: Html)

<!DOCTYPE html>

<html>
  <head>
    <title>@title</title>
    <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
    <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
    <script src="@routes.Assets.at("javascripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
  </head>
  <header>
    This is my header
  </header>
    <section class="navbar">@navbar</section>
    <section class="content">@content</section>
  <footer>
    This is my footer
  </footer>

在我的 index.scala.html 中:

@navbar = {  
<h1>Index</h1>
<ul>
    <li> 
        <a href=@routes.Application.tasks>Tasks</a>
    </li>
</ul>
}
@main("Home")(navbar){
  content
}

在 task.scala.html 中:

@(tasks: List[Task], taskForm: Form[String]) 
@import helper._
@main("Home") {
<h1>Index</h1>
<ul>
    <li> 
        <a href=@routes.Application.tasks>Tasks</a>
    </li>
</ul>
} {
  task code
}

现在要包含此导航栏,似乎我必须在每个页面中重复此操作,这样我就必须将此导航栏硬编码到每个页面中。有没有办法做到这一点,而无需在每个页面中编写整个导航栏?

我也尝试过创建一个 navbar.scala.html 文件,其中包含

<h1>Index</h1>
<ul>
    <li> 
        <a href=@routes.Application.tasks>Tasks</a>
    </li>
</ul>

并保存在视图/下,然后使用@import views.navbar 导入它,但随后我收到一条错误消息,指出“导航栏不是视图的成员”。如果有帮助,我将在 Eclipse Java EE IDE indigo 中编写此代码。

【问题讨论】:

    标签: templates scala playframework-2.0


    【解决方案1】:

    不要导入它,直接调用它:

    @navbar()
    

    【讨论】:

    • 当我使用 '@navbar' 时,它会显示:BaseScalaTemplate(play.api.templates.HtmlFormat$@5272b4dc),而不是实际的 navbar.scala.html
    【解决方案2】:

    要将任何其他视图模板包含到另一个视图模板中, 你可以简单地使用:@views.html.[location].[location].[location]()

    其中 [location] 只是其路径的分解。

    例如:

    @views.html.users.interface()
    

    如果不带任何参数,请务必将“()”即括号放在语句的末尾。如果没有“()”,您将收到如下错误消息: "BaseScalaTemplate(play.api.templates...)"

    如果您的模板有参数,请务必在调用时包含它们,如下所示:

    @views.html.users.interface( "name" )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多