模板複用

一、核心作用

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

模板複用

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *