実行時にテンプレートを生成するためにTemplateLoader
がPlay 1.0
にあります。Play Framework 2.0の動的テンプレート
Play 2.0
に動的にテンプレートを読み込むソリューションはありますか?または、どういうわけかEval
を使ってスカラーコードに変換することはできますか?
例:一部のテンプレートをデータベースに保存して、特定のユーザーが編集できるようにしたいとします。
実行時にテンプレートを生成するためにTemplateLoader
がPlay 1.0
にあります。Play Framework 2.0の動的テンプレート
Play 2.0
に動的にテンプレートを読み込むソリューションはありますか?または、どういうわけかEval
を使ってスカラーコードに変換することはできますか?
例:一部のテンプレートをデータベースに保存して、特定のユーザーが編集できるようにしたいとします。
Play-2.0ディレクトリのframework/src/play/src/main/scala/system/ApplicationProvider.scala
、特にReloadableApplication
クラスに関連するコードがあるようです。テンプレートが要求されているとき(遅いですが)、実行したくないので、このコンパイル時にどのようにあなたに合っているのかは分かりません。つまり、データベースに格納することは意味をなさないということです。つまり、テンプレートのソースコードを保存するのではなく、コンパイルされたテンプレートオブジェクトを保存することです。
引数のために、app/views
ディレクトリにテンプレートを書き込んだだけの場合は、余裕でそれらをコンパイルするためにPlayを終了することができます。しかし、おそらく生産システムではコンパイルされないため、注意してください。
Play 2.0ではテンプレートがオブジェクトメソッドにコンパイルされているため、「動的に読み込む」必要はありません。
app/views/test.scala.html
という単純なテンプレートを考えてみましょう。
@(num:Long)
Your number is @num
それはtest
と呼ばれるviews.html
のScalaの方法になります。このコードで評価してください:
val msg : String = views.html.test(23).toString()
htmlビューのみを使用する必要はありません。文字列でテンプレートを使用するには、play.api.templates.Txt
の派生クラスを使用します。
@(id:Long)Your id is @id
それは方法views.txt.quick
になり、使用されています:
val msg2 : String = views.txt.quick(32).body
あなたはよりthe documentation for the the play.api.templatesパッケージに見つけることができますこれはapp/views/quick.scala.txt
と呼ばれるテンプレートです。
ありがとうございますが、質問は実行時に新しいテンプレートを生成する方法です。たとえば、一部のテンプレートをデータベースに保存して、特定のユーザーが編集できるようにしたいとします。 – senia
ああ、もっと複雑な命題です。関連するコードはPlay-2.0ディレクトリの 'framework/src/play/src/main/scala/system/ApplicationProvider.scala'にあり、' ReloadableApplication'クラスを見ています。しかし、これはバックグラウンドでsbtにタスクを渡すようです。もちろん、ユーザーがテンプレートを書くことができるかどうかを検討する必要があります。彼らはコマンドで完全なプログラミング力を持っていることを考えれば、あなたは大規模なハッキングに自分自身を開いていませんか?すべて最高です – craigmj
ありがとう!私はそれが私が探しているものだと思う。もう一度丁寧にお礼を言いますが、もちろん、この機能はすでに開発サーバー上でのみ使用できます。私はそれを受け入れるためにあなたの答えを更新してください。 – senia