実行時にテンプレートを生成するためのTemplateLoader
ものがあります。Play 1.0
でテンプレートを動的にロードするソリューションはありますPlay 2.0
か? または、どうにかして使用するためのスカラ コードに変換できEval
ますか?
例: 特定のユーザーが編集できるように、いくつかのテンプレートをデータベースに保存したいと考えています。
実行時にテンプレートを生成するためのTemplateLoader
ものがあります。Play 1.0
でテンプレートを動的にロードするソリューションはありますPlay 2.0
か? または、どうにかして使用するためのスカラ コードに変換でき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 をそのままにして、後でそれらをコンパイルすることができます。ただし、本番システムではコンパイルできない可能性があるため、注意してください。