英文:
Golang new template not working
问题
当我运行以下代码时:
t, _ := template.ParseFiles("index.html")
t.Execute(w, nil)
页面可以正常加载。
但是当我尝试运行以下代码时:
t := template.New("first")
t, _ = t.ParseFiles("index.html")
t.Execute(w, nil)
只有一个空白页面加载。
我正在尝试在 Golang 的 HTML 模板中更改分隔符的值,并希望创建模板、更改分隔符的值,然后解析文件。
还有其他人遇到这个问题吗?
英文:
When I run:
t, _ := template.ParseFiles("index.html")
t.Execute(w, nil)
the page loads fine.
But when I try and run
t := template.New("first")
t, _ = t.ParseFiles("index.html")
t.Execute(w, nil)
the only thing that loads is a blank page.
I am trying to change the delimiter values in a Golang html template and would like to make the template, change the delimiter values, then parse the file.
Does anyone else have this problem?
答案1
得分: 19
第一个版本按照你的期望工作,因为包级别的ParseFiles
函数将返回一个新的模板,该模板具有第一个解析文件的名称和内容。
然而,在第二种情况下,你创建了一个名为"first"
的模板,然后解析了一个名为"index.html"
的模板。当你在"first"
上调用t.Execute
时,它仍然是空的。
你可以通过以下两种方式来解决这个问题:
- 使用
template.New("index.html")
,这样文件名就与你接下来解析的模板名称匹配; - 使用
t.ExecuteTemplate(w, "index.html", nil)
来显式地提供你想要执行的模板名称。
英文:
The first version works as you expect because the package-level ParseFiles
function will return a new template that has the name and content of the first parsed file.
In the second case, though, you're creating a template named "first"
and then parsing one with name "index.html"
. When you call t.Execute
on "first"
, it's still empty.
You can fix the problem by either:
- Using
template.New("index.html")
, so that the file name matches the template name you parse next; - Providing the template name you want to execute explicitly with
t.ExecuteTemplate(w, "index.html", nil)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论