1

我有两个 Go 模板。

top.html

<html>
<head>
    <title>{{ .title }}</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta charset="UTF-8">
</head>
<body>

register.html

{{ template "top.html" . }}
    <h1>Register account</h1>
...

目前要设置标题,我使用以下功能:

r.GET("/register", func(c *gin.Context) {
    c.HTML(http.StatusOK, "register.html", gin.H{
        "title" : "Register Account"
    })
})

这并不理想,因为我必须为每个网页设置参数。我怎样才能设置title从?我宁愿有一些看起来像: top.htmlregister.html

{{ set .title = "Register Account" }}
{{ template "top.html" . }}
    <h1>Register account</h1>
...

当然,上面的代码是行不通的。有什么可以实现我想要的吗?

4

1 回答 1

1

您可以通过实现模板函数来做到这一点。例如:

func mapset(m map[string]string, key, val string) error {
    m[key] = val
    return nil
}

Funcs然后,在使用该方法注册它之后,{{ set .title = "Register Account" }}您可以将其用作:

{{ (mapset . "title" "Register Account") }}

https://play.golang.com/p/a08OVDpLLH4

于 2020-04-09T07:41:54.943 回答