レンダリング結果の取得
ちょっとした理由 から、play1 でテンプレートをレンダリングした結果として生成される HTML をプログラムから取得する方法について調べてみました。
手順は下記の通りで、とても簡単です。
- play.templates.TemplateLoader#load(String) に views から見たテンプレートファイルまでの相対パスを渡して play.templates.Template インスタンスを取得する
- テンプレートで使う引数を Map にまとめて play.templates.Template.render(Map<String, Object>) に渡す
TemplateLoader#load(String) に渡すテンプレートファイルのパスには規約で定められた app/views/ ディレクトリからの相対パスで指定する必要があるらしく、少しハマりました。
Template.render(Map<String, Object>) に渡す Map は自分でちまちま作ります。
以下、今回対応したソースコードの抜粋です。
private static String getHtml(String version, String id) { String html = null; if (Play.mode == Play.Mode.PROD && !isTextile(version)) { (snip) } else { (snip) Template template = TemplateLoader.load("Documentation/page.html"); Map<String, Object> args = new HashMap<String, Object>(); args.put("request", request); args.put("versions", versions); args.put("version", version); args.put("id", id); args.put("article", article); args.put("navigation", navigation); html = template.render(args); } return html; }
簡単ですね。