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

golang http模板变量不起作用

golang http模板变量不起作用

Go
炎炎设计 2022-06-01 16:46:15
我正在尝试在 Go 中使用 http 模板来呈现列表中网页上特定文件夹中的所有文件。每个文件或文件夹也应该链接到它各自的路径。我已经阅读了文件夹中的所有项目并将它们保存到这些结构中type Item struct {    Name     string          IsFolder bool            Info     os.FileInfo }// Items contains a slice of all items in a foldertype 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 }} 绝对可以。如果我只是删除 /,它也不起作用,这会产生完全相同的问题。当然,我的问题是为什么会发生这种情况以及我将如何解决它。附言。你可能会注意到一个小的安全漏洞,如果你把 ../ 放在 ftp?f= 字段中,你会沿着文件树往上走。是的,我知道这一点,我会尝试解决这个问题。如果您对如何解决该问题有任何建议,也可以告诉我:)
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

{{range .Items}}匹配之后{{end}},模板运行时将上下文设置为循环变量,即Item. AnItem没有父母。您可以使用 $: use{{$.Parent}}来访问全局上下文。



查看完整回答
反对 回复 2022-06-01
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

在您的循环内,.是 current Item,并且由于没有Item.Parent字段,因此.Parent循环中没有。



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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号