Golang. 发送数据到模板不起作用。

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

Golang. Sending data to template doesn't works

问题

我想知道将任何数据发送到模板(html/template包)的正确方法是什么?我的代码如下:

var templates = template.Must(template.ParseFiles(
    path.Join(this.currentDirectory, "views/base.html"),
    path.Join(this.currentDirectory, "views/main/test.html"),
))

templates.Execute(response, map[string]string{
    "Variable": "Тест!",
})

这是模板内容:

{{define "content"}}
{{ .Variable }}
{{end}}

谢谢!

英文:

I want to know what is the true way to send any data to template (the html/template package)? My code is below:

var templates = template.Must(template.ParseFiles(
	path.Join(this.currentDirectory, "views/base.html"),
	path.Join(this.currentDirectory, "views/main/test.html"),
))

templates.Execute(response, map[string]string{
	"Variable": "Тест!",
})

And that's template:

{{define "content"}}
{{ .Variable }}
{{end}}

I will be thankful!

答案1

得分: 5

你的模板有一个名字叫做"content",所以你需要明确执行那个模板。

templates.ExecuteTemplate(os.Stdout, "content", map[string]string{
    "Variable": "Тест!",
})

你可能没有解析你认为的内容。从template.ParseFiles的文档中可以看到(我加了重点)

返回的模板的名字将会是第一个文件的(基本)名字和(解析后的)内容

尝试使用:

t, err := template.New("base").ParseFiles("base.html", "test.html")
if err != nil { ... }
t.Execute(response, variables)

如果有帮助的话,这里有一个playground的例子

英文:

Your template has a name, "content", so you need to specifically execute that template.

templates.ExecuteTemplate(os.Stdout, "content", map[string]string{
	"Variable": "Тест!",
})

You may not be parsing what you think. From the template.ParseFiles documentation (emphasis mine)

> The returned template's name will have the (base) name and (parsed) contents of the first file

Try using:

t, err := template.New("base").ParseFiles("base.html", "test.html")
if err != nil { ... }
t.Execute(response, variables)

And here's a playground example if it helps.

huangapple
  • 本文由 发表于 2014年8月8日 22:03:20
  • 转载请务必保留本文链接:https://go.coder-hub.com/25205346.html
匿名

发表评论

匿名网友

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

确定