我正在嘗試在 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}}來訪問全局上下文。
- 2 回答
- 0 關注
- 123 瀏覽
添加回答
舉報
0/150
提交
取消
