engine.LoadHTMLGlob(加载特定目录)

只有一个参数,通配符,如:template/* 意思是找当前项目路径下 template 文件夹下所有的html 文件,如:engine.LoadHTMLGlob("templates/*")

  1. func main() {
  2. router := gin.Default()
  3. router.LoadHTMLGlob("templates/*")
  4. //router.LoadHTMLFiles("templates/template1.html", "templates/template2.html")
  5. router.GET("/index", func(c *gin.Context) {
  6. c.HTML(http.StatusOK, "index.tmpl", gin.H{
  7. "title": "Main website",
  8. })
  9. })
  10. router.Run(":8080")
  11. }

templates/index.tmpl

  1. <html>
  2. <h1>
  3. {{ .title }}
  4. </h1>
  5. </html>

使用不同目录下名称相同的模板

  1. func main() {
  2. router := gin.Default()
  3. router.LoadHTMLGlob("templates/**/*")
  4. router.GET("/posts/index", func(c *gin.Context) {
  5. c.HTML(http.StatusOK, "posts/index.tmpl", gin.H{
  6. "title": "Posts",
  7. })
  8. })
  9. router.GET("/users/index", func(c *gin.Context) {
  10. c.HTML(http.StatusOK, "users/index.tmpl", gin.H{
  11. "title": "Users",
  12. })
  13. })
  14. router.Run(":8080")
  15. }

templates/posts/index.tmpl

  1. {{ define "posts/index.tmpl" }}
  2. <html><h1>
  3. {{ .title }}
  4. </h1>
  5. <p>Using posts/index.tmpl</p>
  6. </html>
  7. {{ end }}

自定义模板渲染器

你可以使用自定义的 html 模板渲染

  1. import "html/template"
  2. func main() {
  3. router := gin.Default()
  4. html := template.Must(template.ParseFiles("file1", "file2"))
  5. router.SetHTMLTemplate(html)
  6. router.Run(":8080")
  7. }

自定义分隔符

你可以使用自定义分隔

  1. r := gin.Default()
  2. r.Delims("{[{", "}]}")
  3. r.LoadHTMLGlob("/path/to/templates")

自定义模板功能

查看详细示例代码

main.go

  1. import (
  2. "fmt"
  3. "html/template"
  4. "net/http"
  5. "time"
  6. "github.com/gin-gonic/gin"
  7. )
  8. func formatAsDate(t time.Time) string {
  9. year, month, day := t.Date()
  10. return fmt.Sprintf("%d/%02d/%02d", year, month, day)
  11. }
  12. func main() {
  13. router := gin.Default()
  14. router.Delims("{[{", "}]}")
  15. router.SetFuncMap(template.FuncMap{
  16. "formatAsDate": formatAsDate,
  17. })
  18. router.LoadHTMLFiles("./testdata/template/raw.tmpl")
  19. router.GET("/raw", func(c *gin.Context) {
  20. c.HTML(http.StatusOK, "raw.tmpl", map[string]interface{}{
  21. "now": time.Date(2017, 07, 01, 0, 0, 0, 0, time.UTC),
  22. })
  23. })
  24. router.Run(":8080")
  25. }

raw.tmpl

  1. Date: {[{.now | formatAsDate}]}

结果:

  1. Date: 2017/07/01

engine.LoadHTMLFiles(特定文件)

不定长参数,可以传多个字符串,使用这个方法需要指定所有要使用的html文件路径
,如:engine.LoadHTMLFiles("templates/index.html","template/user.html")

指定模板路径

  1. // 使用*gin.Context下的HTML方法
  2. func Hello(context *gin.Context) {
  3. name := "zhiliao"
  4. context.HTML(http.StatusOK,"index.html",name)
  5. }

注意:不要使用 golang 里面 run,否则会报错

  1. panic: html/template: pattern matches no files: 'templates/*'

cmd 运行即可

多级目录的模板指定

如果有多级目录,比如 templates 下有userarticle 两个目录,如果要使用里面的 html 文件,必须得在 Load 的时候指定多级才可以,比如:engine.LoadHTMLGlob("templates/**/*")

  1. 有几级目录,得在通配符上指明

    • 两级:engine.LoadHTMLGlob("templates/**/*")
    • 三级:engine.LoadHTMLGlob("templates/**/**/*")
  2. 指定html文件

    // 除了第一级的 templates 路径不需要指定,后面的路径都要指定
    e.g.:context.HTML(http.StatusOK,"user/index.html","zhiliao")

  1. 在html中 ```html 必须使用

{{ define “user/index.html” }}

html内容

{{ end }} ```

参考链接

https://laravelacademy.org/post/21880

原文

原文作者:Go 技术论坛文档:《Gin 框架中文文档(1.5)》 转自链接:https://learnku.com/docs/gin-gonic/2019/examples-html-rendering/6160 版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。