英文:
How to pass just a variable (not a struct member) into text/html template. Golang
问题
有没有办法将变量(字符串、整数、布尔值)传递到模板中?例如(类似的方式):
import (
"html/template"
)
func main() {
....
tmpl := template.Must(template.ParseFiles("templates/index.html"))
mux.HandleFunc("/", func(rw http.ResponseWriter, req *http.Request) {
varmap := map[string]interface{}{
"var1": "value",
"var2": 100,
}
tmpl.ExecuteTemplate(rw, "index", varmap)
})
// index.html的内容
{{define "index"}}
{{var1}} 等于 {{var2}}
{{end}}
}
英文:
is there any way to pass just a variable (string, int, bool) into template. For example (something similar):
import (
"html/template"
)
func main() {
....
tmpl := template.Must(template.ParseFiles("templates/index.html"))
mux.HandleFunc("/", func(rw http.ResponseWriter, req *http.Request) {
varmap := map[string]interface{}{
"var1": "value",
"var2": 100,
}
tmpl.ExecuteTemplate(rw, "index", varmap)
})
// content of index.html
{{define "index"}}
{{var1}} is equal to {{var2}}
{{end}}
}
答案1
得分: 14
是的,只需在其前面使用点号:
http://play.golang.org/p/7NXu9SDiik
package main
import (
"html/template"
"log"
"os"
)
var tmplString = ` // content of index.html
{{define "index"}}
{{.var1}} 等于 {{.var2}}
{{end}}
`
func main() {
tmpl, err := template.New("test").Parse(tmplString)
if err != nil {
log.Fatal(err)
}
varmap := map[string]interface{}{
"var1": "value",
"var2": 100,
}
tmpl.ExecuteTemplate(os.Stdout, "index", varmap)
}
英文:
Yes just use the dot in front of it:
http://play.golang.org/p/7NXu9SDiik
package main
import (
"html/template"
"log"
"os"
)
var tmplString = ` // content of index.html
{{define "index"}}
{{.var1}} is equal to {{.var2}}
{{end}}
`
func main() {
tmpl, err := template.New("test").Parse(tmplString)
if err != nil {
log.Fatal(err)
}
varmap := map[string]interface{}{
"var1": "value",
"var2": 100,
}
tmpl.ExecuteTemplate(os.Stdout, "index", varmap)
}
答案2
得分: 8
可以传递任意类型的简单值。如果这样做,你可以在模板中使用{{.}}
来引用它。
以下是一个示例(在Go Playground上尝试):
s := "<html><body>Value passed: {{.}}</body></html>\n"
tmpl := template.Must(template.New("test").Parse(s))
tmpl.Execute(os.Stdout, false)
tmpl.Execute(os.Stdout, 1)
tmpl.Execute(os.Stdout, "me")
输出结果:
<html><body>Value passed: false</body></html>
<html><body>Value passed: 1</body></html>
<html><body>Value passed: me</body></html>
英文:
It is possible to pass just a simple value of any type. If you do so, you can refer to it in the template as {{.}}
.
Here is an example (try it on the Go Playgound):
s := "<html><body>Value passed: {{.}}</body></html>\n"
tmpl := template.Must(template.New("test").Parse(s))
tmpl.Execute(os.Stdout, false)
tmpl.Execute(os.Stdout, 1)
tmpl.Execute(os.Stdout, "me")
Output:
<html><body>Value passed: false</body></html>
<html><body>Value passed: 1</body></html>
<html><body>Value passed: me</body></html>
答案3
得分: 0
尝试使用fasttemplate 1。它接受一个占位符替换值的映射。而且在简单模板上的速度比html/template更快。
1 http://github.com/valyala/fasttemplate
英文:
Try fasttemplate 1. It accepts a map of placeholders' substitution values. And it works faster than html/template on simple templates.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论