Golang模板间传递多个参数的实现方法
Golang模板间传递多个参数的实现方法 我有几个使用 Go HTML 模板的页面(没有从 Go 传递任何参数)。
主模板应该传递两个字符串参数给下一个模板。
{{template "httpend" "main" "sub"}}
另一个包含脚本的模板应该能够接收这些参数并触发一个 JavaScript 函数。
{{define "httpend"}}
<script src="/js/menu.js" defer></script>
<script src="/js/nav.js" defer></script>
<script>
window.onload = function() {
fillsubmenu({{.}},{{.}})
}
</script>
{{end}}
这样做的目的是使其更符合 DRY 原则。在每个页面上重复脚本会难以维护。
没有从 Go 传递点参数(.main .sub)。只是纯字符串…
没有报告错误,但 httpend 模板由于某种原因没有显示。因此也没有被触发。
我如何将多个字符串作为参数传递给另一个 Go HTML 模板?
更多关于Golang模板间传递多个参数的实现方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
NobbZ:
使用结构体或映射上下文,并使用适当的名称来创建和访问。
使用 HTML?
使用结构体或映射作为上下文,并使用适当的名称来创建和访问。
单个模板中不能有多个上下文或“参数”。
在Go模板中传递多个参数的正确方法是使用{{template}}动作的变体形式。以下是实现方法:
{{define "main"}}
<!DOCTYPE html>
<html>
<body>
<!-- 传递多个参数的正确语法 -->
{{template "httpend" (dict "param1" "main" "param2" "sub")}}
</body>
</html>
{{end}}
{{define "httpend"}}
<script src="/js/menu.js" defer></script>
<script src="/js/nav.js" defer></script>
<script>
window.onload = function() {
// 访问传递的参数
fillsubmenu("{{.param1}}", "{{.param2}}")
}
</script>
{{end}}
或者使用slice传递参数:
{{define "main"}}
<!DOCTYPE html>
<html>
<body>
<!-- 使用slice传递多个值 -->
{{template "httpend" (slice "main" "sub")}}
</body>
</html>
{{end}}
{{define "httpend"}}
<script src="/js/menu.js" defer></script>
<script src="/js/nav.js" defer></script>
<script>
window.onload = function() {
// 通过索引访问slice元素
fillsubmenu("{{index . 0}}", "{{index . 1}}")
}
</script>
{{end}}
对于更复杂的情况,可以创建自定义数据结构:
{{define "main"}}
<!DOCTYPE html>
<html>
<body>
<!-- 传递结构化的数据 -->
{{template "httpend" (map "menu" "main" "submenu" "sub" "active" true)}}
</body>
</html>
{{end}}
{{define "httpend"}}
<script src="/js/menu.js" defer></script>
<script src="/js/nav.js" defer></script>
<script>
window.onload = function() {
fillsubmenu("{{.menu}}", "{{.submenu}}")
{{if .active}}activateMenu();{{end}}
}
</script>
{{end}}
在Go代码中渲染模板的示例:
func handler(w http.ResponseWriter, r *http.Request) {
tmpl := template.Must(template.ParseFiles("layout.html", "httpend.html"))
// 如果需要从Go传递数据
data := struct {
Title string
Menu string
}{
Title: "My Page",
Menu: "main",
}
tmpl.ExecuteTemplate(w, "layout", data)
}
关键点:
- 使用
dict、slice或map函数包装多个参数 - 在子模板中通过键名或索引访问参数
- 确保模板文件被正确解析和包含


