2013-01-04 34 views
2

我正在使用模板成功獲取所有數據並顯示在表中。我在此代碼中使用Go查詢數據存儲,並將Membership作爲實體類型。將* datastore.Key添加到切片

在html頁面中,顯示所有數據,但不顯示鍵。

我試圖將Key *datastore.Key作爲屬性添加到Membership結構中,但仍然沒有運氣。

這裏是我的代碼:

package hello 

import (
    "appengine" 
    "appengine/datastore" 
    "html/template" 
    "net/http" 
    "time" 
)   

type Membership struct { 
    Key *datastore.Key 
    Author string 
    Content string 
    FirstName string 
    LastName string 
    Address string 
    Email string 
    Grade string 
    Date time.Time 
} 

func init() { 
    http.HandleFunc("/", members) 
} 

func members(w http.ResponseWriter, r *http.Request) { 
    c := appengine.NewContext(r) 
    q := datastore.NewQuery("Membership").Order("-Date") 
    memberships := make([]Membership, 0, 10) 
    if _, err := q.GetAll(c, &memberships); err != nil { 
     http.Error(w, err.Error(), http.StatusInternalServerError) 
     return 
    } 
    if err := membersTemplate.Execute(w, memberships); err != nil { 
     http.Error(w, err.Error(), http.StatusInternalServerError) 
    } 
} 

var membersTemplate = template.Must(template.New("page").Parse(membersTemplateHTML)) 

const membersTemplateHTML = ` 
<html> 
    <body> 
    <table><tr><th>Key</th><th>Name</th><th>Email</th><th>Adress</th><th>Grade</th></tr> 
     {{range .}} 
     <tr> 
      <td>{{.Key}}</td> 
      <td>{{.FirstName}} {{.LastName}}</td> 
      <td>{{.Email}}</td> 
      <td>{{.Address}}</td> 
      <td>{{.Grade}}</td> 
     </tr> 
     {{end}} 
    </table> 
    </body> 
</html>` 

回答

3

您需要的關鍵分配給Key屬性:

func members(w http.ResponseWriter, r *http.Request) { 
    .... 
    if keys, err := q.GetAll(c, &memberships); err != nil { 
     http.Error(w, err.Error(), http.StatusInternalServerError) 
     return 
    } 
    // Loop over the membership and add the keys 
    for i := range memberships { 
     memberships[i].Key = keys[i] 
    } 
    .... 
} 

您還可能需要禁用存儲在數據存儲中的Key屬性:

type Membership struct { 
    Key *datastore.Key `datastore:"-"` 
    .... 
} 

Btw。如果你想在HTML中顯示*datastore.Key,你應該在之前使用Encode()

+0

感謝這個解決方案,它的工作原理! ;-) – sagit

+0

@ user1949730不要忘記標記爲答案。只需點擊勾號。很高興它對你有效 :) – Testuser