Шаблон не может оценить поле X в типе Y - PullRequest
0 голосов
/ 29 сентября 2019

В Go я перебираю результат запроса и добавляю результаты к срезу. Затем я пытаюсь отобразить данные в html-шаблоне, но получаю эту ошибку: executing "orders.html" at <.Customer>: can't evaluate field Customer in type []main.Order Вот мой код:

type Order struct {
    Order_id int
    Customer string
    Date_of_purchase string
}

func OrderPage(w http.ResponseWriter, r *http.Request) {
db := dbConnection()
var (
    order_id int
    customer string
    date_of_p string
    ps []Order
)
rows, err := db.Query("SELECT * FROM orders WHERE customer = 'David'")
if err != nil {
    panic(err.Error())
}
for rows.Next() {
    err = rows.Scan(&order_id, &customer, &date_of_p)
    if err != nil {
        log.Println(err)
        http.Error(w, "there was an error", http.StatusInternalServerError)
        return
    }
    ps = append(ps, Order{Order_id: order_id, Customer: customer, Date_of_purchase: date_of_p})
}
temp, err := template.ParseFiles("templates/orders.html")
if err != nil { 
  log.Print("template parsing error: ", err)
}
err = temp.Execute(w, ps)
if err != nil {
    fmt.Println(err)
}
}

Мой html-шаблон выглядит так:

<h1>Hello</h1>
<h3>Your username is {{ .Customer }}</h3>
{{ range . }}
<h2> {{ .Order_id }}</h2>
{{ end }}

Я получаю данные из БД, просто не могу отобразить их на html-странице.

1 Ответ

1 голос
/ 29 сентября 2019

Вы передаете ps, фрагмент main.Order вашему шаблону. В вашем шаблоне . все еще является срезом.

Ваша строка <h3>Your username is {{ .Customer }}</h3> пытается получить доступ к элементу Customer этого []main.Order - которого у него нет.

Возможно, вы захотите получить имя клиента из первого элемента среза или передать структуру в шаблон, который имеет это поле, например, так:

type Customer struct {
    Orders []Order
    Username string
}

Тогда вам нужно будет изменить свой шаблон следующим образом:

<h1>Hello</h1>
<h3>Your username is {{ .Username }}</h3>
{{ range .Orders }}
<h2> {{ .Order_id }}</h2>
{{ end }}
...