Используйте случай: У меня есть маршрут обработки всех запросов на хост: порт/р маршрут выглядит следующим образом:Play Framework/Twirl Динамически включают шаблоны
GET /p/*path controllers.Application.p(path: String)
Метод p
получает некоторые данные и передает это право до представления p
:
return ok(p.render(currentSession));
в представлении я хочу импортировать шаблон, если существует один, который соответствует строке в моих передаваемых данных. В этом случае String представляет собой имя объекта модели, например «Пользователь», и если есть соответствующий шаблон, он будет views/custompages/User.scala.html
. Если нет соответствующего шаблона, я бы хотел использовать общий, например views/generic.scala.html
.
У меня есть 2 части на вопрос:
Часть 1: Я вижу, что я могу проверить для существования шаблона просто выполнив следующие действия:
@if(custompages.User != null) {
<p>it exists!</p>
}
но если я изменить его custompages.Usera
(не существующий шаблон) Я получаю ошибку компиляции (object Usera is not a member of package
). Как это сделать?
Часть 2: Как я могу выполнить проверку, используя строку, которую я представляю для класса модели? конкатенировать его в месте жестко закодированного «Пользователь» в ответе на часть 1?
Я иду об этом неправильно? Является ли то, что я делаю, должно быть обработано в контроллере, используя отражение, чтобы найти соответствующий шаблон, а затем отобразить соответствующий?
Я всегда стоять контроллер путь, причина проста: виды (как шаблоны дизайна) являются своим родом работы графических дизайнеров (в основном) и должны быть минимальная логика включена в него, особенно то, что может привести к сбою стр. – biesior