3

実行時にテンプレートを生成するためのTemplateLoaderものがあります。Play 1.0

でテンプレートを動的にロードするソリューションはありますPlay 2.0か? または、どうにかして使用するためのスカラ コードに変換できEvalますか?

例: 特定のユーザーが編集できるように、いくつかのテンプレートをデータベースに保存したいと考えています。

4

2 に答える 2

3

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パッケージのドキュメントをご覧ください。

于 2012-04-12T04:04:53.030 に答える
2

関連するコードはframework/src/play/src/main/scala/system/ApplicationProvider.scalaPlay-2.0 ディレクトリ、特にReloadableApplicationクラスにあるようです。テンプレートが要求されたときにコンパイルを実行したくない (遅い) ため、このオンザフライでのコンパイルがどのように適しているかはわかりません。つまり、データベースに格納することはあまり意味がありません。テンプレートのソース コードを格納するのではなく、コンパイルされたテンプレート オブジェクトを格納する必要があります。

引数として、テンプレートをディレクトリに書き込んだだけであれば、app/viewsPlay をそのままにして、後でそれらをコンパイルすることができます。ただし、本番システムではコンパイルできない可能性があるため、注意してください。

于 2012-04-12T19:30:09.180 に答える