2012-04-11 27 views
3

実行時にテンプレートを生成するためにTemplateLoaderPlay 1.0にあります。Play Framework 2.0の動的テンプレート

Play 2.0に動的にテンプレートを読み込むソリューションはありますか?または、どういうわけかEvalを使ってスカラーコードに変換することはできますか?

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

答えて

2

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

引数のために、app/viewsディレクトリにテンプレートを書き込んだだけの場合は、余裕でそれらをコンパイルするためにPlayを終了することができます。しかし、おそらく生産システムではコンパイルされないため、注意してください。

3

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と呼ばれるテンプレートです。

+0

ありがとうございますが、質問は実行時に新しいテンプレートを生成する方法です。たとえば、一部のテンプレートをデータベースに保存して、特定のユーザーが編集できるようにしたいとします。 – senia

+1

ああ、もっと複雑な命題です。関連するコードはPlay-2.0ディレクトリの 'framework/src/play/src/main/scala/system/ApplicationProvider.scala'にあり、' ReloadableApplication'クラスを見ています。しかし、これはバックグラウンドでsbtにタスクを渡すようです。もちろん、ユーザーがテンプレートを書くことができるかどうかを検討する必要があります。彼らはコマンドで完全なプログラミング力を持っていることを考えれば、あなたは大規模なハッキングに自分自身を開いていませんか?すべて最高です – craigmj

+0

ありがとう!私はそれが私が探しているものだと思う。もう一度丁寧にお礼を言いますが、もちろん、この機能はすでに開発サーバー上でのみ使用できます。私はそれを受け入れるためにあなたの答えを更新してください。 – senia

関連する問題