gpt4 book ai didi

html - 在 golang html 模板中访问 {{range .}} 范围之外的结构变量

转载 作者:IT王子 更新时间:2023-10-29 01:18:44 26 4
gpt4 key购买 nike

<!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>

我有这个模板,页面顶部有一个表单,需要来自任何一个已发送帖子的线程 ID(它们都是一样的,所有帖子的一部分都具有特定的线程 ID),这显然行不通,我唯一的其他想法是

{{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 int
subject string
name string
text string
date_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);

最佳答案

如果线程 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 injection exploits 的配方.如果线程 ID 是数字,则确保在将其传递到 SQL 查询之前对其进行解析。例如:清理您的输入。

关于html - 在 golang html 模板中访问 {{range .}} 范围之外的结构变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22366725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com