我无法弄清楚为什么传递的变量没有用 html/template 呈现
这是在浏览器中呈现的内容:
这是所有传递的变量: [0xc0000a8ec0 0xc0000a8f80 0xc0000a9040 0xc0000a9100]
城市 人口 州 国家 首都
这是日志:
$ go run main.go
2019/11/27 11:00:39 **** => &city has &main.City{Name:"Washington D.C.", State:"", Country:"USA", Capital:false, Population:680000} before appending to cities ****
2019/11/27 11:00:39 **** => &city has &main.City{Name:"Los Angeles", State:"CA", Country:"USA", Capital:false, Population:3900000} before appending to cities ****
2019/11/27 11:00:39 **** => &city has &main.City{Name:"San Francisco", State:"CA", Country:"USA", Capital:false, Population:860000} before appending to cities ****
2019/11/27 11:00:39 **** => &city has &main.City{Name:"Tokyo", State:"", Country:"Japan", Capital:true, Population:9000000} before appending to cities ****
**** => cities outside {} has 4
这是处理函数:
func indexHandler(w http.ResponseWriter, r *http.Request) {
projectID := "XXXXXXXXXXXXXX"
ctx := context.Background()
client, _ := firestore.NewClient(ctx, projectID)
query := client.Collection("cities").Documents(ctx)
defer query.Stop()
cities := make([]*City, 0)
for {
doc, err := query.Next()
if err == iterator.Done {
break
}
c := doc.Data()
// is there an easier way to populate the city struct
city := City{
Name: c["name"].(string),
Country: c["country"].(string),
Population: c["population"].(int64),
}
// This is my ugly solution to dealing with nil value from Firestore
_, ok := c["capital"]
if ok {
city.Capital = c["capital"].(bool)
}
state, ok := c["state"].(string)
if ok {
city.State = state
}
log.Printf("**** => &city has %#v before appending to cities ****", &city)
cities = append(cities, &city)
}
fmt.Printf("**** => cities outside {} has %d", len(cities))
indexTemplate.Execute(w, cities)
}
这是 index.html 模板:
{% autoescape true %}
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<P>This is all the passed variables: {{ . }}</P>
<table>
<tr> <td>City</td> <td>Population</td> <td> State</td><td>Country</td> <td>Capital</td> </tr>
{{ range .cities }}
<tr> <td>testing</td> <td>testing</td> <td>testing</td><td>testing</td> <td>testing</td> </tr>
<tr> <td>{{.Name}}</td> <td>{{ .Population}}</td> <td>{{ .State}}</td><td>{{.Country}}</td> <td>{{.Capital}}</td> </tr>
{{ end }}
</table>
{{ $cities := . }}
</body>
</html>
{% endautoescape %}