在运行时生成模板TemplateLoader
。Play 1.0
有什么解决方案可以动态加载模板Play 2.0
吗?或者我可以以某种方式将其转换为 scala 代码以供使用Eval
?
例如:我想在数据库中存储一些模板,以便某些用户可以编辑它们。
在运行时生成模板TemplateLoader
。Play 1.0
有什么解决方案可以动态加载模板Play 2.0
吗?或者我可以以某种方式将其转换为 scala 代码以供使用Eval
?
例如:我想在数据库中存储一些模板,以便某些用户可以编辑它们。
Play 2.0 已经将您的模板编译为对象方法,因此您不必“动态加载”它们!
考虑这个名为app/views/test.scala.html
.
@(num:Long)
Your number is @num
它成为views.html
被调用的 Scala 方法test
。使用以下代码对其进行评估:
val msg : String = views.html.test(23).toString()
您不必只使用 html 视图。要将模板与字符串一起使用,请使用play.api.templates.Txt
派生类。这是一个名为app/views/quick.scala.txt
:
@(id:Long)Your id is @id
它成为一种方法views.txt.quick
并被使用:
val msg2 : String = views.txt.quick(32).body
您可以在 play.api.templates包的文档中找到更多信息。
似乎相关代码在framework/src/play/src/main/scala/system/ApplicationProvider.scala
Play-2.0 目录中,尤其是ReloadableApplication
类。我不确定这种即时编译是否适合您,因为您不想在请求模板时这样做(它很慢)。这意味着存储在数据库中没有多大意义:您不想存储模板源代码,而是存储已编译的模板对象。
为了争论,如果您只是将模板写入app/views
目录,您可以让 Play 闲暇时编译它们。但是,请注意,因为它们可能不会在生产系统上编译。