英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论