Golang 模版引用时不能接收到相应的数据

可能标题说不太清楚,就是使用templates模块化时,结构如下:

header.html

{{ define "Header" }}
<!DOCTYPE html>
<html lang="en-US">
    <head>
    <title>{{Title}} - {{.BlogName}}</title>
        <meta charset="UTF-8" />
        <link rel="stylesheet" href="/static/css/bootstrap.min.css">
    </head>
    <body>
{{ end }}

index.html内容如下,它引入上面的Header;

{{ define "Index" }}
{{ template "Header" }}
<div class="container">
    <h2> 用户列表 </h2>
    <table class="table">
        <thead>
        <tr>
            <td>ID</td>
            <td>用户名</td>
        </tr>
        </thead>
        <tbody>
        {{ range .List }}
        <tr>
            <td>{{ .Id }}</td>
            <td> {{ .Name }} </td>
        </tr>
        {{ end }}
        </tbody>
    </table>
</div>
{{ end }}

现在的问题是当我访问路由/home时,处理的代码:

func main() {
    r := gin.Default()
    r.LoadHTMLGlob("templates/*")
    r.Static("/static", "./static")
    r.GET("/home", HomePage)
    r.Run(":9999")
}

而响应/home的方法如下,通过数据库返回数据:

func HomePage(c *gin.Context) {
    var art = make([] *Article, 0)
    //var art Article
    db.Find(&art)
    h := GetBase()
    h["BlogName"] = config.APP.Blogname
    h["Description"] = config.APP.SubTitle
    h["List"] = art
    c.HTML(http.StatusOK, "Index",h)

}

此时访问/home时,index.html中的Id,和Name是可以正常显示的。但是我想header.html里的Title也可以获取到 h["Title"]的值。

就是说这个h作为全局的变量,我希望每个页面都可以显示到博客的名字。就是文章名-博客名。 可能我的方法或者思路不对。

补充: 因为这里是两个html文件了,而HomePage返回的只有一个index,但是index里引入了header,如果我把header.html里的内容直接放到index.html里是可以的,但是它不方便,失去了原有的模块化的意义了。

新手,希望稳各位大神多多指教。

已邀请:

heramerom

赞同来自:

    <title>{{Title}} - {{.BlogName}}</title>

BlogName知道加点,Title怎么不知道加呢。

Swper - It男

赞同来自:

解决方法: index.html中的 {{ template "Header" }} 改成 {{template "Header" .}} 即可以获取到数据了。注意后面带有一点。

要回复问题请先登录注册