1 回答

TA貢獻1796條經驗 獲得超7個贊
您的第一個代碼的問題在于,當您執行以下操作時:
var issueList = template.Must(template.New("template01"). ParseFiles("template01.tmpl"))
template.New()
將創建一個名為 的新模板"template01"
。該變量issueList
將引用此空模板。您調用它的方法,該方法將解析文件并創建一個名為. 該變量仍將引用模板,而不是從文件中解析的模板。當您調用 時,它會執行(默認)指定的模板,即空的. 這就是你得到錯誤的原因。Template.ParseFiles()
"template01.tmpl"
"template01.tmpl"
issueList
template01
Template.Excute()
issueList
template01
incomplete or empty template
在你的第二個版本中:
var issueList = template.Must(template.ParseFiles("template01.tmpl"))
您調用函數,它解析文件并返回其模板。所以將從文件中引用已解析的模板,而不是空模板。所以會執行這個模板。template.ParseFiles()
"template01.tmpl"
issueList
Template.Execute()
注意:如果在第一種情況下您使用Template.ExecuteTemplate()
,您可以命名要執行的模板:
if err := issueList.Execute(w, "template01.tmpl", result); err != nil { log.Fatal(err) }
這將成功,因為您明確告訴執行"template01.tmpl"
從文件解析的,而不是默認的空模板。
另請注意,您不應該在處理程序中解析模板,它很慢。在此之前解析一次,將結果存儲在包級變量中,然后在處理程序中執行它。具體細節參見It takes too much time when using "template" package to generate a dynamic web page to client in Golang
關聯模板詳見Go模板名稱。
也請使用encoding/json
生成 JSON 輸出而不是text/template
or html/template
。模板引擎對JSON格式和編碼一無所知,很容易生成無效的JSON。
- 1 回答
- 0 關注
- 89 瀏覽
添加回答
舉報