在 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 Framework [2.4.x] - 模块路由特定名称因“资产不是包的成员”而失败
迁移到 2.4.x (Java) 后在 Play Framework 中运行测试时出错