登录
首页 >  Golang >  Go问答

golang http 模板变量无法解析

来源:stackoverflow

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

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

在使用 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 函数。有问题的模板如下所示:

<html>
<head>
    <title>website</title>
</head>
<body>
    <h1>welcome to my website</h1>
    <p>files in {{.parent}}</p>
    <ul>
        <li><a href="ftp?f={{ .parent }}">{{.parent}}</a></li>
        {{range .items}} {{if .isfolder}}
        <li><a href="ftp?f={{ .parent }}/{{ .name }}">{{ .name }}</a></li>
        {{else}}
        <li><a href="ftp?f={{ .parent }}/{{ .name }}">{{.name}}</a></li>
        {{end}} {{end}}
    </ul>
</body>
</html>

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

<li><a href="ftp?f={{ .Parent }}/{{ .Name }}">{{ .Name }}</a></li>

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

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

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


解决方案


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

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

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

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