Golang Gin Gonic框架中如何在嵌套页眉/页脚模板中访问传递的接口变量
解决Gin模板中子模板无法访问变量的问题
我来帮你搞定这个子模板变量访问的问题!你遇到的情况是Go模板系统的正常行为——当你用{{ template "header.html" }}调用子模板时,默认不会把父模板的变量上下文传递过去,所以header和footer里拿不到那些title、firstname变量。
核心解决方案:显式传递上下文数据
只需要修改你home.html里的子模板调用代码,在模板名称后加上.(代表当前的变量上下文),就能把所有变量传递给子模板了:
修改后的home.html:
{{ template "header.html" . }} <!-- 加上 . 传递完整变量上下文 --> <!-- BEGIN: Content--> <div class="app-content content "> <div class="content-overlay"></div> <div class="header-navbar-shadow"></div> <div class="content-wrapper"> </div> </div> </div> <!-- END: Content--> {{ template "footer.html" . }} <!-- 同样传递上下文 -->
修改完成后,你就可以在header.html或者footer.html里像在home.html中一样,用{{ .title }}、{{ .firstname }}、{{ .lastname }}来访问这些变量了。
可选:传递单个特定变量(按需使用)
如果某个子模板只需要特定的单个变量,你也可以单独传递这个变量,比如只给header传递title:
{{ template "header.html" .title }}
这时候在header.html里,直接用{{ . }}就能拿到title的值,但这种方式只能传递单个变量,适合子模板需求简单的场景,你的情况显然需要多个变量,所以第一种传递整个上下文的方法更合适。
验证其他配置
你的Gin静态资源和模板加载代码是没问题的:
router.Static("/static", "./static") router.LoadHTMLGlob("templates/**/*.html")
模板能正常加载内容说明路径匹配正确,只要补上上下文传递的.,变量就能正常访问了。
内容的提问来源于stack exchange,提问作者Afzal Khan
相关产品推荐
相关产品推荐

