<!DOCTYPE html><html><head> <title> Test </title></head><body> <div> <h2>Reply</h2> <form action="/post/{{$threadID}}" method="POST"> <input type="text" name="subject" /> <input type="text" name="name" value="Anonymous" /> <input type="text" name="message" /> <input type="submit" value="submit" /> </form> </div> <div> {{range .}} {{$threadID := .ThreadID}} <h3>{{.Subject}}</h3> <h3>{{.Name}}</h3> <div>{{.DatePosted}}</div> <div><p>{{.Text}}</p></div> <br /><br /> {{end}} </div></body>我有这个模板,页面顶部有一个表单,需要来自任何发送的帖子的 threadID(它们都是相同的,具有特定 threadID 的所有帖子的一部分),这显然不是工作,我唯一的其他想法是{{range .}} {{if $threadID == nil}} $threadID := .ThreadID //build the form same as above {{end}} <h3>{{.Subject}}</h3> <h3>{{.Name}}</h3> <div>{{.DatePosted}}</div> <div><p>{{.Text}}</p></div> <br /><br />{{end}}如果以上任何一个不清楚,这里是 Post 结构和方法。type Post struct {threadID intsubject stringname stringtext stringdate_posted string}func (p *Post) ThreadID() int { return p.threadID }func (p *Post) Subject() string { return p.subject }func (p *Post) Name() string { return p.name }func (p *Post) Text() string { return p.text }func (p *Post) DatePosted() string { return p.date_posted } 以及发送到模板的帖子切片的来源threadID := r.URL.Path[len("/reply/"):]replies, err := i.db.Query("SELECT * FROM latest_threads where thread_id="+threadID);
2 回答
aluckdog
TA贡献1847条经验 获得超7个赞
如果只能从 Post 类型本身检索 Thread Id,请考虑将您的帖子切片转换为单独的类型。给它一个 ThreadID 方法,它只返回它包含的第一篇文章的 id,如果不存在则返回零。
type PostList []*Post
func (p PostList) ThreadId() int {
if len(p) == 0 {
return 0
}
return p[0].ThreadId
}
将此列表传递到模板中。现在您可以从模板中引用它,在{{range .}}子句之外的任何地方。
<form action="/post/{{.ThreadID}}" method="POST">
漏洞利用警告
附带说明一下,Little Bobby Tables的 SQL 查询存在问题。您可能只是将其发布为一个快速示例。如果不是,请注意您的代码是SQL 注入攻击的秘诀。如果线程 ID 是数字,则确保在将其传递到 SQL 查询之前将其解析为数字。例如:清理您的输入。
- 2 回答
- 0 关注
- 396 浏览
添加回答
举报
0/150
提交
取消