簡體   English   中英

在html模板golang中的許多結構的片段中訪問struct變量

[英]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類型的Postposts := []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這樣的編碼軟件包)無法訪問未導出的數據成員,因此您必須以某種方式導出它們:

選項1

// directly export fields
type Post struct {
    ThreadID int
    Subject, Name, Text, DatePosted string
}

選項2

// 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM