GoFrame的模板引擎支持模板布局(Template Layout),允许你创建一个基础模板,然后在其基础上扩展和替换内容。以下是一个简单的例子,演示如何在GoFrame中使用模板布局:

1. 创建基础模板(layout.html):
   <!DOCTYPE html>
   <html lang="en">
   <head>
       <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
       <title>{{.title}}</title>
       {{block "styles" .}} {{end}}
   </head>
   <body>
       <header>
           <h1>{{.header}}</h1>
       </header>
       <section>
           {{template "content" .}}
       </section>
       <footer>
           <p>{{.footer}}</p>
       </footer>
       {{block "scripts" .}} {{end}}
   </body>
   </html>

   在这个基础模板中,使用了{{block "blockName" .}} {{end}}语法定义了一些块,可以在子模板中替换这些块的内容。注意,{{template "content" .}}是用来引入子模板的。

2. 创建子模板(index.html):
   {{extend "layout.html"}}
   {{define "styles"}}
       <style>
           /* Custom styles for this page */
           body {
               background-color: #f0f0f0;
           }
       </style>
   {{end}}

   {{define "content"}}
       <h2>Welcome to the Home Page</h2>
       <p>This is the main content of the home page.</p>
   {{end}}

   {{define "scripts"}}
       <script>
           // Custom scripts for this page
           console.log("Page-specific scripts");
       </script>
   {{end}}

   在子模板中,通过{{extend "layout.html"}}语法指定了基础模板,然后通过{{define "blockName"}} ... {{end}}语法替换了基础模板中对应的块。

3. 在Go代码中渲染模板:
   package main

   import (
       "github.com/gogf/gf/frame/g"
       "github.com/gogf/gf/net/ghttp"
   )

   func main() {
       app := g.New()

       // 注册路由
       app.BindHandler("/", func(r *ghttp.Request) {
           // 渲染模板
           r.Render("index.html", g.Map{
               "title":  "My GoFrame App",
               "header": "Welcome to My App",
               "footer": "© 2023 My App",
           })
       })

       // 启动Web服务器
       app.Run()
   }

   在这个例子中,通过r.Render("index.html", g.Map{...})渲染了子模板,并传递了一些模板变量用于替换基础模板中的内容。

这是一个简单的模板布局的示例,你可以根据实际需求扩展和定制你的模板布局。使用模板布局可以有效地组织和管理你的前端代码,使得代码结构更加清晰和可维护。


转载请注明出处:http://www.zyzy.cn/article/detail/7617/GoFrame