2012-04-11 14 views
3

Es gibt TemplateLoader in Play 1.0 zum Generieren von Vorlagen in Laufzeit.Dynamische Vorlagen in Play Framework 2.0

Gibt es eine Lösung zum dynamischen Laden der Vorlage in Play 2.0? Oder kann ich es irgendwie in Scala-Code für die Verwendung von Eval konvertieren?

Zum Beispiel: Ich möchte einige Vorlagen in der Datenbank speichern, damit bestimmte Benutzer sie bearbeiten können.

Antwort

2

Es scheint, dass der relevante Code in framework/src/play/src/main/scala/system/ApplicationProvider.scala im Verzeichnis Play-2.0 ist, insbesondere in der Klasse ReloadableApplication. Ich bin mir nicht sicher, wie das Kompilieren im laufenden Betrieb zu Ihnen passt, da Sie es nicht tun möchten, wenn die Vorlage angefordert wird (es ist langsam). Das bedeutet, dass das Speichern in einer Datenbank nicht sinnvoll ist: Sie möchten nicht den Quellcode der Vorlage, sondern das kompilierte Vorlagenobjekt speichern.

Wenn Sie die Vorlagen einfach in das Verzeichnis app/views geschrieben haben, können Sie Play für die Zwecke der Kompilierung freigeben. Aber Vorsicht, denn sie werden wahrscheinlich nicht auf einem Produktionssystem kompiliert.

3

Play 2.0 kompiliert Ihre Vorlagen bereits zu Objektmethoden, sodass Sie sie nicht dynamisch laden müssen!

Betrachten Sie diese einfache Vorlage namens app/views/test.scala.html.

@(num:Long) 
Your number is @num 

Es wird eine Scala-Methode von views.htmltest genannt. Werten Sie es mit diesem Code aus:

val msg : String = views.html.test(23).toString() 

Sie müssen nicht nur HTML-Ansichten verwenden. Verwenden Sie die play.api.templates.Txt abgeleiteten Klassen, um Vorlagen mit Zeichenfolgen zu verwenden. Dies ist eine Vorlage app/views/quick.scala.txt genannt:

@(id:Long)Your id is @id 

Es wird ein Verfahren views.txt.quick und verwendet wird:

val msg2 : String = views.txt.quick(32).body 

Mehr erfahren Sie in the documentation for the the play.api.templates Paket erfahren.

+0

Vielen Dank, aber die Frage ist, wie man neue Vorlage in Laufzeit generiert. Ich möchte zum Beispiel einige Vorlagen in der Datenbank speichern, damit bestimmte Benutzer sie bearbeiten können. – senia

+1

Ah, ein komplizierterer Vorschlag. Es scheint, dass der relevante Code in "framework/src/play/src/main/scala/system/ApplicationProvider.scala" im Play-2.0-Verzeichnis ist, und ich würde mir die 'ReloadableApplication'-Klasse ansehen. Das scheint aber die Aufgabe zu vererben, im Hintergrund sbt. Natürlich sollten Sie überlegen, ob Sie Ihren Benutzern das Schreiben von Vorlagen ermöglichen möchten. Angesichts der Tatsache, dass sie volle Programmierkraft haben, öffnen Sie sich nicht für einen massiven Hack? Alles Gute – craigmj

+0

Danke! Ich denke, das ist es wonach ich suche. Und nochmals vielen Dank für die Vorsicht, aber natürlich werden diese Funktionen nur auf dem Entwicklungsserver für Benutzer verfügbar sein, die bereits die Möglichkeit haben, sie zu zerstören. Bitte aktualisieren Sie Ihre Antwort, damit ich sie akzeptieren kann. – senia

Verwandte Themen