一.模版嵌套

  • 在实际项目中经常出现页面复用的情况,例如:整个网站的头部信息和底部信息复用
  • 可以使用动作{{template “模版名称”}}引用模版
  • 引用的模版必须在HTML中定义这个模版
  1. {{define "名称"}}
  2. html
  3. {{end}}
  • 执行主模版时也要给主模版一个名称,执行时调用的是ExecuteTemplate()方法
  1. {{define "layout"}}
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  3. "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <title>Title</title>
  7. </head>
  8. <body>
  9. {{template "head" }}<br/>
  10. 中间的内容<br/>
  11. {{template "foot" }}
  12. </body>
  13. </html>
  14. {{end}}
  1. {{define "head"}}
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  3. "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <title>Title</title>
  7. </head>
  8. <body>
  9. head.html
  10. </body>
  11. </html>
  12. {{end}}
  1. {{define "foot"}}
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  3. "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <title>Title</title>
  7. </head>
  8. <body>
  9. foot.html
  10. </body>
  11. </html>
  12. {{end}}
  1. package main
  2. import (
  3. "net/http"
  4. "html/template"
  5. )
  6. func welcome(w http.ResponseWriter, r *http.Request) {
  7. //要加载所有需要被嵌套的文件
  8. t, _ := template.ParseFiles("view/index.html", "view/head.html", "view/foot.html")
  9. //执行主模版,主要调用的方法
  10. t.ExecuteTemplate(w, "layout", nil)
  11. }
  12. func main() {
  13. server := http.Server{Addr: ":8090"}
  14. http.HandleFunc("/", welcome)
  15. server.ListenAndServe()
  16. }

二. 调用模版时同时传递参数

  • 如果直接引用html可以直接使用html标签的<iframe>,但是要动态效果时,可以在调用模版给模版传递参数
  1. {{define "layout"}}
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  3. "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <title>Title</title>
  7. </head>
  8. <body>
  9. {{template "head" "head的参数"}}<br/>
  10. 中间的内容<br/>
  11. {{template "foot" "foot的参数"}}
  12. </body>
  13. </html>
  14. {{end}}
  • 在子模版中依然是使用{{.}}获取传递过来的参数
  1. {{define "head"}}
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  3. "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <title>Title</title>
  7. </head>
  8. <body>
  9. head.html
  10. {{.}}
  11. </body>
  12. </html>
  13. {{end}}