go 為我們提供了 text/template 庫和 html/template 庫這兩個模板引擎,模板引
擎通過將資料和模板組合在一起生成最終的 html,而處理器負責呼叫模板引擎並將引
擎生成的 html 返回給客戶端。
go 的模板都是文字文件(其中 web 應用的模板通常都是 html),它們都嵌入了
一些稱為動作的指令。從模板引擎的角度來說,模板就是嵌入了動作的文字(這些文字
通常包含在模板檔案裡面),而模板引擎則通過分析並執行這些文本來生成出另外一些
文字。使用 go 的 web 模板引擎需要以下兩個步驟:
(1) 對文字格式的模板源進行語法分析,建立乙個經過語法分析的模板結構,其中
模板源既可以是乙個字串,也可以是模板檔案中包含的內容。
(2 )執行經過語法分析的模板,將 responsewriter 和模板所需的動態資料傳遞給模
板引擎,被呼叫的模板引擎會把經過語法分析的模板和傳入的資料結合起來,生成出最
終的 html,並將這些 html 傳遞給 responsewriter。
下面就讓我們寫乙個簡單的 helloworld
建立模板檔案 hello.html
//嵌入動作 }
在處理器中觸發模板引擎
func handler(w http.responsewriter, r *http.request)
瀏覽器中的結果
hello world!
parsefiles 函式
當我們呼叫 parsefiles 函式解析模板檔案時,go 會建立乙個新的模板,
並將給定的模板檔案的名字作為新模板的名字,如果該函式中傳入了多個
檔名,那麼也只會返回乙個模板,而且以第乙個檔案的檔名作為模板
的名字,至於其他檔案對應的模板則會被放到乙個 map 中。讓我們再來
看一下 helloworld 中的**:
t, _ := template.parsefiles("hello.html")
以上**相當於呼叫 new 函式建立乙個新模板,然後再呼叫 template 的
parsefiles 方法:
t := template.new("hello.html")
t, _ = t.parsefiles("hello.html")
我們在解析模板時都沒有對錯誤進行處理,go 提供了乙個 must 函式專
門用來處理這個錯誤。must 函式可以包裹起乙個函式,被包裹的函式會
返回乙個指向模板的指標和乙個錯誤,如果錯誤不是 nil,那麼 must 函式
將產生乙個 panic。
實驗 must 函式之後的**
t := template.must(template.parsefiles("hello.html"))
parseglob 函式
通過該函式可以通過指定乙個規則一次性傳入多個模板檔案,如:
t, _ := template.parseglob("*.html")
通過 execute 方法
如果只有乙個模板檔案,呼叫這個方法總是可行的;但是如果有多個模板
檔案,呼叫這個方法只能得到第乙個模板
通過 executetemplate 方法
例如:t, _ := template.parsefiles("hello.html", "hello2.html")
變數 t 就是乙個包含了兩個模板的模板集合,第乙個模板的名字是
hello.html,第二個模板的名字是 hello2.html,如果直接呼叫 execute 方法,
則只有模板 hello.html 會被執行,如何想要執行模板 hello2.html,則需要
呼叫 executetemplate 方法
t.executetemplate(w, "hello2.html", "我要在 hello2.html 中顯示")
go web開發第三講 模板引擎
模板引擎就是乙個可以再模板中使用變數的一套框架,可以方便我們進行html的巢狀,資料的傳輸。接下來我們講解如何在go開發中使用模板引擎。handleindex 通過呼叫tempate.must方法,我們可以對模板資料夾進行解析 然後呼叫tempalates.executetempate表示具體呼叫哪...
NVelocity模板引擎
因此決定自學一下nvelocity的使用 拋開monorail 安裝後,在其下的bin目錄中可找到nvelocity.dll net專案中將用到 並將其複製出來放到我的測試web bin目錄下。到castleproject上看了一下using it大致有四步 先要引入以下命名空間 using com...
twig模板引擎
twig是乙個靈活 高效並且安全的php模板引擎。如果你使用過smarty django或者jinja這類基於文字的模板引擎的話,那麼你會覺得twig是很自然而然的事情。twig嚴格遵守了php的信念,同時增加了在模板環境中很有用的函式,這些做法使得twig不論是對設計師還是開發人員,都是非常友好的...