我想添加另一个文件夹,其中Play查找Scala模板文件。
默认情况下,Play会在app/views/
中找到模板。我想让Play在另一个文件夹app/views-site-specific/
中查找视图。这可能吗?我该怎么做?
背景
此views-site-specific
文件夹实际上是指向Play应用的父目录的符号链接。 Play应用程序保存在Git存储库中,此父目录是另一个 Git存储库,它存储特定于站点的主题和自定义项,从Play应用程序存储库中进行符号链接。通过这种方式,我可以避免在Play应用程序本身中存储特定于站点的内容。 (它应该在许多不同的网站上重复使用,所以我不希望那里有任何网站特定的东西。)
这是一切的布局:
site-specific-git-repo/
|
+--play-2.1-application-git-repo/
| +--conf/
| +--public/
| +--app/
| +--controllers/
| +-- ...
| +--views/
| | +--"built-in" Scala templates for e.g. admin pages
| | +--themes/ -- bundled with app server, for E2E tests
| +--views-site-specific
| |
| |
| |
+--themes/ <--` (symbolic link)
答案 0 :(得分:1)
在Java(Play 2.3)中,可以在任何目录中添加视图并通过导入访问它们,例如在controllers目录中添加名为test.scala.html
的视图文件,然后
import controllers.html.test;
// ...
return ok(test.render());
从子目录导入多个视图文件也可以(这里使用controllers/views/
)
import controllers.views.html.*;
答案 1 :(得分:0)
如果它实际上不可能(我不知道),我使用了一个有点复杂的解决方法:
(你需要阅读OP中的背景部分,这才有趣。)
我在app / views /文件夹中创建了两个主题文件夹,并将其中一个软件链接到[假定的父Git仓库中的主题/文件夹]。而不是尝试创建另一个 app / views /文件夹。
这两个主题文件夹中的一个用于内置主题,另一个用于特定于站点的主题,如下所示:
site-specific-git-repo/
|
+--play-2.1-application-git-repo/
| +--conf/
| +--public/
| +--app/
| +--controllers/
| +-- ...
| +--views/
| +--..."built-in" Scala templates for e.g. admin pages
| +--themesbuiltin/
| | +--default20121009 <— bundled with Play app, for E2E tests
| +--themes/ <— site specific, don't want in Play app Git repo
| |
| |
+--themes/ <----` (symbolic link)
现在我的Scala代码变得有点复杂了:它搜索app / views / themesbuiltin /和app / views / themes /以查找Scala模板文件。 (在配置文件中指定了要使用的Scala模板,并且在运行时通过反射找到它。)
然而,CSS和JS有时也可能位于
.../themesbuiltin/[theme-name]/styles.css
,有时在.../themes/[theme-name]/styles.css
,我觉得这种解决方法会使Scala代码变得不必要地复杂。