在 Play [2.4.x] 中是不是可以检测到 Twirl 模板的实际文件名?

Posted

技术标签:

【中文标题】在 Play [2.4.x] 中是不是可以检测到 Twirl 模板的实际文件名?【英文标题】:In Play [2.4.x] is it possible to detect a Twirl template's actual file name?在 Play [2.4.x] 中是否可以检测到 Twirl 模板的实际文件名? 【发布时间】:2015-08-27 14:44:56 【问题描述】:

我希望在 html 的输出中放置标记(仅在开发期间),以便我确切知道在任何给定时间正在调用哪些模板和 sn-ps。 (这是一个庞大且不断增长的图书馆......)

目前我有这样的事情:

@if(tkAuthenticatedRequest.isDev) <!-- mystuff.myform.helpers.snippet.scala.html -->

这当然可行,但容易出错或遗漏。

我们可以检测到实际的文件名并让它自动通过吗?

是否有更好的方法将其附加到开发并且根本不需要身份验证?虽然我已经lazy val'ed 调用了 isDev,所以它只有一次点击,但我对更好的想法持开放态度。

【问题讨论】:

也许你可以使用@this.getClass().getName()之类的东西,但我不知道它会在模板文件中返回什么... 我的朋友们几乎有点工作!它给出了模板的“视图”名称。例如。您将用于在模板中调用它的名称。它似乎没有考虑任何子模块路径等...... 【参考方案1】:

如果你想要实际的文件名,神奇的答案如下:

@if(tkAuthenticatedRequest.isDev)  
  <!-- @Option(this.getClass().getProtectionDomain().getCodeSource()).map(x => x.getLocation()) --> 

请注意,Twirl 很难消化这一点,除非它被分成三行,因此您可能想从中创建一个 Util 函数,然后将 this.getClass() 传递给该函数。

【讨论】:

以上是关于在 Play [2.4.x] 中是不是可以检测到 Twirl 模板的实际文件名?的主要内容,如果未能解决你的问题,请参考以下文章

Play 2.4 添加模块而不是插件

Play Framework [2.4.x] - 模块路由特定名称因“资产不是包的成员”而失败

Play 2.4.x - 资产复制

迁移到 2.4.x (Java) 后在 Play Framework 中运行测试时出错

Play Framework 2.4.x - 覆盖默认的 Actor 系统创建

扩展 Play Framework 2.4.x 背后的方法