英文:
Gin not rendering inherited template structure
问题
我有一个应用程序,其中我尝试使用从基本布局派生的多个模板。
当应用程序启动时,模板加载正常,但当我导航到应用程序时,出现以下情况:
- 如果我指定一个模板文件,则为空白。
- 如果我使用模板中指定的值来指定内容,则只显示特定内容。
以下是代码示例:
base.tmpl.html
{{define "base"}}
<html>
<head>
some title
</head>
<body>
{{ template "content" . }}
</body>
<footer>
{{ template "footer" . }}
</footer>
</html>
{{end}}
footer.tmpl.html
{{define "footer"}}
<h1>Footer</h1>
{{end}}
home.tmpl.html - 这是我尝试渲染的页面。
{{ define "content" }}
<h1>test</h1>
{{ end }}
这是路由部分。当我指定 "content" 时,h1 标签中会显示 'test',但没有底部或基本布局中的 'some title'。当我指定 home.tmpl.html
时,视图为空白。
对于这两种情况都没有生成错误,并且响应返回 200 OK。
func GetIndex(c *gin.Context) {
c.HTML(http.StatusOK, "content", gin.H{
"title": "Home Page",
})
}
我是这样加载模板的:
func main() {
router := setupRouter()
router.Run()
}
func setupRouter() *gin.Engine {
router := gin.Default()
files, err := filepath.Glob("templates/*")
if err != nil {
log.Fatal(err)
}
tmpl := template.Must(template.New("").ParseFiles(files...))
router.SetHTMLTemplate(tmpl)
router.StaticFS("/static", http.Dir("static"))
router.SetTrustedProxies([]string{"*"})
routes.InitializeRoutes(&router.RouterGroup)
return router
}
希望对你有所帮助!
英文:
componentsI have an app in which I am trying to use multiple templates derived from a base layout.
The templates load ok when the app launch but when I navigate to the app it is either:
- Blank when I specify a template file
- Shows only the specific content when I use the value specified in a templates "define" parameter.
base.tmpl.html
{{define "base"}}
<html>
<head>
some title
</head>
<body>
{{ template "content" . }}
</body>
<footer>
{{ template "footer" . }}
</footer>
</html>
{{end}}
footer.tmpl.html
{{define "footer"}}
<h1>Footer</h1>
{{end}}
home.tmpl.html - This is the page I am trying to render.
{{ define "content" }}
<h1>test</h1>
{{ end }}
This is the route. When I specify "content" I get 'test' within the h1 tags but without the footer or 'some title' from the base. When I specify home.tmpl.html
the view is blank.
There are no errors generated for either and the responses return 200 OK.
func GetIndex(c *gin.Context) {
c.HTML(http.StatusOK, "content", gin.H{
"title": "Home Page",
})
}
I am loading the templates like so:
func main() {
router := setupRouter()
router.Run()
}
func setupRouter() *gin.Engine {
router := gin.Default()
files, err := filepath.Glob("templates/*")
if err != nil {
log.Fatal(err)
}
tmpl := template.Must(template.New("").ParseFiles(files...))
router.SetHTMLTemplate(tmpl)
router.StaticFS("/static", http.Dir("static"))
router.SetTrustedProxies([]string{"*"})
routes.InitializeRoutes(&router.RouterGroup)
return router
}
答案1
得分: 1
以下是翻译好的内容:
以下设置解决了问题:
-
将
base.tmpl.html
重命名为base.layout.tmpl
{{define "base"}} <html> <head> 一些标题 </head> <body> {{block "content" .}} {{end}} </body> {{template "footer" .}} </html> {{end}}
-
home.tmpl.html
{{template "base" .}} {{define "content"}} <h1>测试</h1> {{ end }}
-
footer.tmpl.html
{{define "footer"}} <footer> <h1>页脚</h1> </footer> {{end}}
英文:
The following setup resolved the issue
-
Rename
base.tmpl.html
tobase.layout.tmpl
{{define "base"}} <html> <head> some title </head> <body> {{block "content" .}} {{end}} </body> {{template "footer" .}} </html> {{end}}
-
home.tmpl.html
{{template "base" .}} {{define "content"}} <h1>test</h1> {{ end }}
-
footer.tmpl.html
{{define "footer"}} <footer> <h1>Footer</h1> </footer> {{end}}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论