我正在尝试在Golang中将基模板继承到我的**主页 * 文件中
我的目录结构:
project_root
/templates
/layouts
base.layout.html
/pages
home.page.html
Gin路由器配置:
router.LoadHTMLGlob("./templates/layouts/*.layout.html")
router.LoadHTMLGlob("./templates/pages/*.page.html")
templates/layouts/base.layout.html文件:
{{define "base"}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{.Title}}</title>
</head>
<body>
{{block "content" .}} {{end}}
</body>
</html>
{{end}}
templates/pages/ho,e.page.html文件:
{{template "base" .}}
{{define "page-title"}}
Home
{{end}}
{{end}}
我得到的错误:
错误#01:html/template:home.page.html:1:11:没有这样的模板“基地”
- 注意:如果我删除了继承,主页加载 * 正常。
1条答案
按热度按时间cxfofazt1#
TL;DR
不要对
LoadHTMLGlob
进行两个不同的调用,而是用途:说明
这里的问题是由于对
LoadHTMLGlob
的第二次调用完全覆盖了第一次调用加载的内容。这是因为:LoadHTMLGlob
调用engine.SetHTMLTemplate(templ)
:https://github.com/gin-gonic/gin/blob/v1.9.1/gin.go#L263SetHTMLTemplate
分配engine.HTMLRender
:https://github.com/gin-gonic/gin/blob/v1.9.1/gin.go#L284因此,在代码中对
LoadHTMLGlob
的两次调用结束时,engine.HTMLRender
的内容与只调用LoadHTMLGlob("./templates/pages/*.page.html")
的内容相同。所以base
不存在是正常的,因为它是在./templates/layouts/*.layout.html
中定义的。这就是为什么你应该只对
LoadHTMLGlob
进行一次调用。关于您的模板
另外,我不知道你想在这里实现什么,但是在
home.page.html
中定义的page-title
在base.layout.html
中没有使用,而是使用了.Title
。如果你的Go代码是:然后,您可以在布局中使用
page-title
(而不是.Title
):并在您的主页中这样定义它:
当访问
/
时,您将获得一个标题为Home
的网页,正文内容等于Welcome to my website!
。