登录
首页 >  Golang >  Go问答

Golang 模板无法加载

来源:stackoverflow

时间:2024-04-06 21:33:36 126浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《Golang 模板无法加载》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我开始编写一个 gin 应用程序,我的项目树如下所示

-assets
--css
---{bootstrap}
-templates
--layouts
---footer.html
---head.html
---header.html
--book.html
-main.go

在 main.go 中我加载模板并且没有错误

router.loadhtmlglob("./templates/layouts/*.html")

我定义模板

{{ define "head" }}

    //head

 {{ end }}

我把它们筑巢

{{ define "header" }}
 {{ template "head.html" . }}
 //html
 {{ end }}

但是当我尝试使用它们时,我得到空输出

{{ template "header" . }}
 

{{ .title}}

{{ .author.fullname}}

[编辑]执行模板的函数:

func getBook(c *gin.Context) {
//DB stuff
var book models.Book
t, err := template.ParseFiles("templates/book.html")
if err != nil {
    log.Println(err)
}
t.Execute(c.Writer, book)
}

完整代码可以在 github 上找到


解决方案


router.loadhtmlglobtemplate.parsefiles 是处理模板的两种不同方法。 parsefiles 返回的模板不知道 loadhtmlglob 加载的模板。一旦您决定使用 loadhtmlglob,您就应该使用 c.HTML 来渲染您的模板。此 c.HTML 方法的 name 参数可以是 {{define "name"}} action 中指定的名称或模板文件的基本名称(包括我相信的扩展)。

所以在你的情况下你应该这样做:

c.HTML(http.StatusOK, "book.html", book)

更多示例可以在这里找到:https://gin-gonic.com/docs/examples/html-rendering/

请记住,LoadHTMLGlob 依赖于 template.ParseGlob,其中指出:

这意味着,如果您希望所有模板都可以通过 c.html 访问,您需要确保它们具有唯一的基本名称,或者需要包含 {{ define "名称"}} 操作。

今天关于《Golang 模板无法加载》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>