go - 与嵌套 golang html 模板作斗争
问题描述
我仍在为 golang 模板而苦苦挣扎。我可以让他们工作。但不是我需要的方式。
我想有一个大师layout.gohtml
,然后解析一个页面模板thispage.gohtml
。我希望master是一个完整的布局,带有{{template "title" .}}
,{{template "content" .}}
等。然后页面模板将包含带有{{define ...}}
等的变化内容......
如果我在每个请求上解析模板并且没有 FuncMaps,我就可以完成这项工作。但我想解析一次并按名称调用它们。这是我做不到的。我只是得到一个没有错误的空白页。被困在这几天了。
我还想在 FuncMaps 中添加一些自定义函数以进行格式化等。在这种嵌套场景中我无法工作。它适用于更简单的非嵌套场景。
有人可以看看我的代码并告诉我哪里出错了吗?此输出只是空白,调试(在 vscode 中)似乎没有显示任何明显的内容。谢谢...
此代码生成一个空白页面并且没有错误...预期输出是基于模板的渲染页面...并且没有名称的 tmpl.Execute 具有相同的空白结果。
// Show handler
func Show(w http.ResponseWriter, r *http.Request) {
var page models.Page
name := mux.Vars(r)["name"]
switch r.Method {
case "GET":
if name != "" {
page = models.GetPageByName(name)
} else {
page = models.GetPageByName("home")
}
data := make(map[string]interface{})
data["Page"] = page
funcMap := template.FuncMap{
"toupper": strings.ToUpper,
}
var err error
tmpl := template.New("show").Funcs(funcMap)
tmpl, err = tmpl.ParseFiles("templates/layout.gohtml", "templates/show.gohtml")
if err != nil {
fmt.Println(err)
}
// err = tmpl.ExecuteTemplate(w, "show", data)
err = tmpl.Execute(w, data)
if err != nil {
fmt.Println(err)
}
}
}
布局.gohtml:
<!doctype html>
<html lang="en">
<head>
<title>{{block "title" .}}Default Title{{end}}</title>
</head>
<body>
<nav>...</nav>
<div class="container">
{{template "content" .}}
</div>
</body>
</html>
显示.gohtml:
{{define "title"}}{{.Page.Title}}{{end}}
{{define "content"}}
<h1>{{.Page.Title}}</h1>
{{.Page.Content}}
{{end}}
解决方案
推荐阅读
- python - 打印数据库的所有元素,使用 Flask 转换为 HTML 中的 python 列表,无需硬编码值
- javascript - 在接收套接字请求时使用 redux thunk 和 socket.io
- json - 在nodejs中从json设置模型值
- c# - 使用比例网格大小 (*) 时如何自动限制行/列的最小尺寸?
- javafx - JavaFX应用程序中的实时XChart
- android - github上的cherrypicking提交,一些基本东西的问题
- android - 在视频上添加水印
- javascript - Alasql - 使用 Wraptext 和多个工作表创建 Excel
- python-3.x - 容器在 Google Cloud Shell 中启动,但在 Kubernetes Engine 上失败
- mysql - 使用 3 个条件和 1 个顺序对大型 MySQL 表执行长查询