2012-04-11 4 views
3

Существует TemplateLoader в Play 1.0 для создания шаблонов во время выполнения.Динамические шаблоны в Play Framework 2.0

Есть ли решение для динамической загрузки шаблона в Play 2.0? Или я могу каким-то образом преобразовать его в scala-код для использования Eval?

Например: Я хочу сохранить некоторые шаблоны в базе данных, чтобы некоторые пользователи могли их редактировать.

ответ

2

Кажется, что соответствующий код находится в framework/src/play/src/main/scala/system/ApplicationProvider.scala в каталоге Play 2.0, в частности класс ReloadableApplication. Я не уверен, как этот компилятор «на лету» подойдет вам, поскольку вы не хотите этого делать, когда запрашивается шаблон (он медленный). Это означает, что хранение в базе данных не имеет особого смысла: вы не хотите хранить исходный код шаблона, а скорее скомпилированный объект шаблона.

Для аргументов, если вы только что написали шаблоны в каталоге app/views, вы можете оставить Play, чтобы скомпилировать их на досуге. Но тогда будьте осторожны, потому что они, вероятно, не будут компилироваться в производственной системе.

3

Play 2.0 уже скомпилирует ваши шаблоны методам объектов, поэтому вам не нужно их «динамически загружать»!

Рассмотрите этот простой шаблон под названием app/views/test.scala.html.

@(num:Long) 
Your number is @num 

Это становится методом Скала из views.html называется 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 

Вы можете узнать больше в the documentation for the the play.api.templates пакете.

+0

Спасибо, но вопрос в том, как сгенерировать новый шаблон во время выполнения. Например, я хочу сохранить некоторые шаблоны в базе данных, чтобы некоторые пользователи могли их редактировать. – senia

+1

Ах, более сложное предложение. Кажется, что соответствующий код находится в 'framework/src/play/src/main/scala/system/ApplicationProvider.scala' в каталоге Play 2.0, и я бы посмотрел на класс« ReloadableApplication ». Но это, похоже, передает задачу sbt в фоновом режиме. Конечно, вы должны подумать о том, сможете ли вы, ваши пользователи, писать шаблоны. Учитывая, что у них есть полная сила программирования по их команде, разве вы не открываете себе массивный хак? Все самое лучшее – craigmj

+0

Спасибо! Я думаю, что это то, что я ищу. И еще раз спасибо за осторожность, но, конечно, эти функции будут доступны только на сервере разработки для пользователей, у которых уже есть возможность его уничтожить. Пожалуйста, обновите свой ответ, чтобы я мог его принять. – senia

Смежные вопросы