Golang新模板不起作用

huangapple go评论75阅读模式
英文:

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时,它仍然是空的。

你可以通过以下两种方式来解决这个问题:

  1. 使用template.New("index.html"),这样文件名就与你接下来解析的模板名称匹配;
  2. 使用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:

  1. Using template.New("index.html"), so that the file name matches the template name you parse next;
  2. Providing the template name you want to execute explicitly with t.ExecuteTemplate(w, "index.html", nil)

huangapple
  • 本文由 发表于 2013年8月26日 12:18:16
  • 转载请务必保留本文链接:https://go.coder-hub.com/18436543.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定