如何在Play Framework 2.1应用程序中添加另一个`views`文件夹?

时间:2013-05-30 05:02:57

标签: playframework themes sbt directory-structure playframework-2.1

我想添加另一个文件夹,其中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)

2 个答案:

答案 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代码变得不必要地复杂。