1 回答

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