如何在 main.scala.html 模板页面中检索当前 url

How to retrieve current url in the main.scala.html template page

抱歉这个愚蠢的问题,但我是 Scala 的新手,我正在学习 Scala 和 Play Framework:

我必须在我的 main.scala.html 模板页面中实现导航栏,并且我必须正确设置活动 class。

我正在使用 scala 2.12 和 Play 框架 2.7.2。

检索请求对象以获取当前 uri 的方法是什么?

尝试像这样将 request 作为隐式参数传递给 main 模板

@(name: String)(implicit request: RequestHeader)

Hello @name. You are at url:
@{request.host}@{request.uri}

确保请求在控制器中被标记为 implicit,以便它像这样自动传递到 main 模板

class HomeController @Inject()(cc: ControllerComponents) extends AbstractController(cc) {
  def index = Action { implicit request =>
    Ok(views.html.main("Picard"))
  }
}

正在上路

GET / controllers.HomeController.index

应该输出

Hello Picard. You are at url:
localhost:9000/

谢谢,我已检索到请求。

只是为了更好地解释:我的项目设置如下:我有两个控制器 HomeController、WidgetController,然后我有四个页面 main.scala.html(模板)、home.scala.html、index.scala.html和 listWidget.scala.html。然后我的路线看起来像:



    GET   /    controllers.HomeController.home
    GET     /index                      controllers.WidgetController.index
    GET     /widgets                    controllers.WidgetController.listWidgets
    POST    /widgets                    controllers.WidgetController.createWidget

我的主模板是这样的:

@(title: String)(content: Html)(implicit request: RequestHeader)

<!DOCTYPE html>
<html lang="en">
    <head>
        @* Here's where we render the page title `String`. *@
        <title>@title</title>
    </head>
    <body>
        <div class="container">
            @(request)
            @content
        </div>
    </body>
</html>

主页看起来像:

@(implicit request: RequestHeader)

@main("Welcome to Play") {
  <h1>Home</h1>
}(request)

HomeController 看起来像:

@Singleton
class HomeController @Inject()(cc: ControllerComponents) extends AbstractController(cc) {

  def home() = Action { implicit request: Request[AnyContent] =>
    Ok(views.html.home(request))
  }
}

所以我必须在我创建的每个页面中传递请求...这是在不修改每个页面的情况下获取请求的更聪明的方法?