GoFrame 模板引擎-模板布局

2022-04-01 13:59 更新

?gview?模板引擎支持兩種?layout?模板布局方式:

  • ?define+ ?template?方式
  • ?include?模板嵌入方式

這兩種方式均支持對模板變量的傳入。

define + template

由于?gview?底層采用了?ParseFiles?方式批量解析模板文件,因此可以使用?define?標簽定義模板內容塊,通過?template?標簽在其他任意的模板文件中引入指定的模板內容塊。?template?標簽支持跨模板引用,也就是說?define?標簽定義的模板內容塊可能是在其他模板文件中,?template?也可以隨意引入。

注意,為嵌套的子模板傳遞模板變量時,應當使用:?{{template "xxx" .}}? 的語法。

使用示例:

  • ?layout.html?
 <!DOCTYPE html>
 <html>
 <head>
     <title>GoFrame Layout</title>
     {{template "header" .}}
 </head>
 <body>
     <div class="container">
     {{template "container" .}}
     </div>
     <div class="footer">
     {{template "footer" .}}
     </div>
 </body>
 </html>
  • ?header.html?
 {{define "header"}}
     <h1>{{.header}}</h1>
 {{end}}
  • ?container.html?
 {{define "container"}}
 <h1>{{.container}}</h1>
 {{end}}
  • ?footer.html?
 {{define "footer"}}
 <h1>{{.footer}}</h1>
 {{end}}
  • ?main.go?
 package main

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

 func main() {
     s := g.Server()
     s.BindHandler("/", func(r *ghttp.Request) {
         r.Response.WriteTpl("layout.html", g.Map{
             "header":    "This is header",
             "container": "This is container",
             "footer":    "This is footer",
         })
     })
     s.SetPort(8199)
     s.Run()
 }

執(zhí)行后,訪問 http://127.0.0.1:8199 結果如下:


include模板嵌入

當然我們也可以使用?include?標簽來實現(xiàn)頁面布局。

注意,為嵌套的子模板傳遞模板變量時,應當使用:?{{include "xxx" .}}? 的語法。

使用示例:


  • ?layout.html?

 {{include "header.html" .}}
 {{include .mainTpl .}}
 {{include "footer.html" .}}

  • ?header.html?

 <h1>HEADER</h1>

  • ?footer.html?

 <h1>FOOTER</h1>

  • ?main1.html?

 <h1>MAIN1</h1>

  • ?main2.html?

 <h1>MAIN2</h1>

  • ?main.go?

 package main

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

 func main() {
     s := g.Server()
     s.BindHandler("/main1", func(r *ghttp.Request) {
         r.Response.WriteTpl("layout.html", g.Map{
             "mainTpl": "main/main1.html",
         })
     })
     s.BindHandler("/main2", func(r *ghttp.Request) {
         r.Response.WriteTpl("layout.html", g.Map{
             "mainTpl": "main/main2.html",
         })
     })
     s.SetPort(8199)
     s.Run()
 }

執(zhí)行后,訪問不同的路由地址,將會看到不同的結果:




以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號