一、核心作用
Velocity 模板引擎透過 #include / #parse 實現模板複用。
網頁通用區塊,例如頁面頂部導航_head.htm、頁尾版權資訊_footer.htm,可以抽離成獨立子模板,在頁面內引入,避免多處重複撰寫 HTML。
二、兩者核心差異
1. #include("檔案路徑")
直接輸出檔案原始內容,不會解析子模板當中的 Velocity 變數($!{xxx})
- 子模板裡的
$!{testinclude}不會被解析渲染,直接輸出原始字串$!{testinclude} - 支援一次匯入多個檔案:
#include("a.htm","b.htm") - 適用場景:純靜態 HTML、完全不含 VTL 變數的靜態片段
2. #parse("檔案路徑")
載入子模板並完整解析 Velocity 語法,父模板傳入的變數可以在子模板正常渲染
- 子模板內的
$!{testinclude}會讀取上下文變數,替換成後端傳入的實際值 - 僅接受單一檔案路徑,不支援同時匯入多個檔案
- 適用場景:頁首、頁尾這類帶有變數的公共模板(頁面標題、動態版權文字等)
對應筆記截圖原文:
#include只是單純把子模板程式碼貼入主模板,不會做解析;#parse則會執行解析動作
三、範例演示
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的原因。
四、場景建議
| 指令 | 適用場景 |
|---|---|
#include | 靜態資源、純文字、靜態HTML片段,不需要變數解析 |
#parse | 共用頁首、頁尾、側邊欄;子模板含有$變數、#if等VTL語法 |
💡 開發規範:
頁面導航、頁尾版權這類很可能需要動態變數的公共元件,統一使用#parse;純靜態文字與樣式片段使用#include。
模板複用