1. 主な役割
Velocityテンプレートエンジンは #include / #parse によってテンプレートの再利用を実現します。
ページヘッダーナビゲーション_head.htm、フッターコピーライト_footer.htmといった共通部分を別サブテンプレートに切り出し、各ページから読み込むことでHTMLの重複記述を回避できます。
2. 二つの命令の本質的な違い
1. #include("ファイルパス")
ファイルの内容をそのまま出力するだけ。サブテンプレート内のVelocity変数($!{xxx})は解釈されません
- サブテンプレート内の
$!{testinclude}はレンダリングされず、文字列そのまま出力されます$!{testinclude} - 複数ファイルをまとめて読み込み可能:
#include("a.htm","b.htm") - 向いている用途:変数を含まない静的HTML、静的コード断片
2. #parse("ファイルパス")
サブテンプレートを読み込み、Velocity文法を完全に解釈実行します。親テンプレートから渡した変数がサブテンプレート内で利用できます。
- サブテンプレートの
$!{testinclude}はコンテキスト変数を参照し、バックエンドから渡された値に置き換わります - 読み込めるファイルは1つだけ、複数同時読み込みには対応していません
- 向いている用途:ヘッダー・フッターなど変数を使用する共通テンプレート(ページタイトル、動的コピーライトなど)
手元メモより:
#includeはサブテンプレートのコードを単純に埋め込むだけで解析しない。#parseは文法解析を実行する
3. 実演サンプル
1. バックエンドコード(.cs)
context.Put("testinclude", "サブテンプレートの文字列:");Code language: JavaScript (javascript)
2. サブテンプレート _footer.htm の内容
コピーライト $!{testinclude}
ケース① #include("./themes/default/_footer.htm")を使用
ページ出力結果:
コピーライト $!{testinclude}
変数が解釈されず、プレースホルダーがそのまま表示されます。
ケース② #parse("./themes/default/_footer.htm")を使用
ページ出力結果:
コピーライト サブテンプレートの文字列:
変数が正しく展開されます。プロジェクトでヘッダー・フッターに#parseを優先する理由がここにあります。
4. 利用シナリオ推奨
| 命令 | 適切な用途 |
|---|---|
#include | 静的リソース、プレーンテキスト、変数を使わない静的HTML断片 |
#parse | 共通ヘッダー、フッター、サイドバー;$変数、#ifなどVTL文法を含むテンプレート |
💡 開発ルール:
動的変数が使われる可能性のあるナビゲーションやフッターには#parseを統一利用。完全静的なテキスト・スタイル断片には#includeを使います。
テンプレート再利用
Previous: テンプレート内で変数を設定する
Next: コメント