登录
首页 >  Golang >  Go问答

golang http 模板变量无法解析

来源:stackoverflow

时间:2024-03-26 13:27:32 412浏览 收藏

在使用 Go 中的 HTTP 模板呈现网页时,作者遇到了一个问题,即模板变量 {{.parent}} 无法解析。经过排查,发现模板运行时上下文在循环内被设置为循环变量,而循环变量中没有父项字段。通过使用全局上下文 $ 访问父项,问题得以解决。

问题内容

我正在尝试使用 go 中的 http 模板将网页上特定文件夹中的所有文件呈现在列表中。每个文件或文件夹还应该链接到其各自的路径。我已经实现了读取文件夹中的所有项目并将它们保存到这些结构中

type item struct {
    name     string      
    isfolder bool        
    info     os.fileinfo 
}

// items contains a slice of all items in a folder
type items struct {
    parent string 
    items  []item 
}

然后将其传递给 template.executetemplate 函数。有问题的模板如下所示:



    website


    

welcome to my website

files in {{.parent}}

但是,我的问题是,加载页面时,唯一返回的是开始直到

  • {{ .Name }}
  • 它在 ?f= 之后停止 现在,我之前仅使用 {{ .name }} 对其进行了测试,效果非常好,当然,链接不会去任何地方。在上面的列表位置渲染 {{ .parent }} 效果绝对很好。 如果我只是删除 /,它也不起作用,这会产生完全相同的问题。

    当然,我的问题是为什么会发生这种情况以及我将如何解决它。

    诗。您可能会注意到一个小安全漏洞,如果您将 ../ 放入 ft​​p?f= 字段中,则会进入文件树。是的,我知道这一点,我会尝试解决这个问题。如果您对如何解决该问题有任何建议,也可以告诉我:)


    解决方案


    {{range .Items}} 之后直到匹配的 {{end}},模板运行时上下文设置为循环变量,即 ItemItem 没有父项。您可以使用 $ 访问全局上下文:改用 {{$.Parent}}

    在循环内,. 是当前的 Item,并且由于没有 Item.Parent 字段,循环中没有 .Parent

    理论要掌握,实操不能落!以上关于《golang http 模板变量无法解析》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

    声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
    相关阅读
    更多>
    最新阅读
    更多>
    课程推荐
    更多>