![](/img/trans.png)
[英]Accessing struct variable outside of {{range .}} scope in golang html template
[英]Accessing struct variable in slice of many structs in html template golang
我正在嘗試將包含許多結構的切片發送到html模板。
我有一個'post'結構
type Post struct {
threadID int
subject string
name string
text string
date_posted string
}
我創建了一個Post
類型的Post
( posts := []Post{}
)
然后使用我的數據庫中的行填充此切片,然后在我的模板上執行。
defer latest_threads.Close()
for latest_threads.Next(){
var threadID int
var subject string
var name string
var text string
var date_posted string
latest_threads.Scan(&threadID, &subject, &name, &text, &date_posted)
post := Post{
threadID,
subject,
name,
text,
date_posted,
}
posts = append(posts, post)
}
t, error := template.ParseFiles("thread.html")
if error != nil{
log.Fatal(error)
}
t.Execute(w, posts)
}
程序編譯/運行正常,但是從模板中查看html輸出時
{{.}}
{{range .}}
<div>{{.threadID}}</div>
<h3>{{.subject}}</h3>
<h3>{{.name}}</h3>
<div>{{.date_posted}}</div>
<div><p>{{.text}}</p></div>
<br /><br />
{{end}}
{{.}}
輸出就好了,但是當到達{{range .}}
的第一個{{.threadID}}
,html會停止。
<!DOCTYPE html>
<html>
<head>
<title> Test </title>
</head>
<body>
//here is where {{.}} appears just fine, removed for formatting/space saving
<div>
它不是很直觀,但模板(以及像JSON這樣的編碼軟件包)無法訪問未導出的數據成員,因此您必須以某種方式導出它們:
// directly export fields
type Post struct {
ThreadID int
Subject, Name, Text, DatePosted string
}
// expose fields via accessors:
type Post struct {
threadID int
subject, name, text, 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 }
(無論您從上面選擇哪個選項,此部分都是強制性的)
{{.}}
{{range .}}
<div>{{.ThreadID}}</div>
<h3>{{.Subject}}</h3>
<h3>{{.Name}}</h3>
<div>{{.DatePosted}}</div>
<div><p>{{.Text}}</p></div>
<br /><br />
{{end}}
這應該工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.