gpt4 book ai didi

Golang 模板不会加载

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:59 25 4
gpt4 key购买 nike

我开始编写一个 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>
//Head
</head>
{{ end }}

然后我嵌套它们

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

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

 {{ template "header" . }}
<h1>{{ .Title}}</h1>

<h3>{{ .Author.Fullname}}</h3>

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

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.HTMLname 参数方法可以是 {{define "name"}} action 中指定的名称或模板文件的基本名称(包括我相信的扩展)。

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

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

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

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

When parsing multiple files with the same name in different directories, the last one mentioned will be the one that results.

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

关于Golang 模板不会加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55190676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com