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 关注
- 67 浏览
添加回答
举报