为了账号安全,请及时绑定邮箱和手机立即绑定

golang中的渲染模板

golang中的渲染模板

Go
MYYA 2022-01-04 20:48:59
我在 Go 中使用 echo 框架来创建一个 Web 应用程序。我有一个名为templatesinside的目录,其中有两个目录layouts和users. 目录树如下:layouts|--------default.tmpl|--------footer.tmpl|--------header.tmpl|--------sidebar.tmplusers|--------index.tmpl页眉、页脚和侧边栏的代码类似于:{{define "header"}}<!-- some html here -->{{ end }} ....default.tmpl 如下:{{ define "default" }}{{ template "header" }}{{ template "sidebar" }}<div class="content-wrapper">    <div class="container-fluid">        <div class="row">            <div class="col-md-12">                <h2 class="page-title">Dashboard</h2>                {{ template "content" .}}            </div>        </div>    </div></div>{{ template "footer" }}{{ end }}和 users\index.tmpl{{define "index"}}    {{template "default"}}{{end}}{{define "content"}}<p>Hello world</p>{{end}}现在,我使用解析文件t := &Template{}t.templates = template.Must(template.ParseGlob("views/layouts/*"))t.templates = template.Must(template.ParseGlob("views/user/*"))并尝试渲染它func User(c echo.Context) error {    return c.Render(http.StatusOK, "index", nil)}但我只收到内部服务器错误。我也不知道如何调试模板。如果其中users\index.tmpl不包含其他模板标签,则该代码有效。但是当我尝试在其中包含主模板时,错误返回。我在这里做错了什么?
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

设法解决了这个问题。此页面https://elithrar.github.io/article/approximating-html-template-inheritance/有所帮助。基本上,我必须将解析模板的代码更改为:


tpls, err := filepath.Glob("views/user/*")

if err != nil {

    log.Fatal(err)

}


layouts, err := filepath.Glob("views/layouts/*")

if err != nil {

    log.Fatal(err)

}


for _, layout := range layouts {

    files := append(layouts, tpls)

    t.templates = template.Must(template.ParseFiles(files...))

}


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信