# #html #go #templates #go-templates
Вопрос:
В этом коде я хочу использовать и указывать конкретную деталь в HTML-файле, например заголовок или цену.
Проблема в том, что существует несколько заголовков и цен, и когда я печатаю конкретный заголовок, он успешно печатает конкретные данные, но я не знаю, как использовать его в HTML-файле для печати конкретных данных там. Все, что я знаю о GOHTML, {{.Heading}}
но это не работает. Есть ли другой способ?
package main
import "net/http"
type Details struct {
Heading string
Price string
}
var Detail = []Details{
{
Heading: "First Cloth",
Price: "$59",
},
{
Heading: "Second Cloth",
Price: "$49",
},
}
func Main(w http.ResponseWriter, r *http.Request) {
HomeTmpl.Execute(w, Detail)
// fmt.Println(Detail[1].Heading) // For specific data
}
Ответ №1:
Вы можете использовать встроенную index
функцию шаблона для получения элемента из фрагмента:
{{ (index . 1).Heading }}
Тестирование:
t := template.Must(template.New("").Parse(`{{ (index . 1).Heading }}`))
if err := t.Execute(os.Stdout, Detail); err != nil {
panic(err)
}
Какие выходы (попробуйте это на игровой площадке Go):
Second Cloth
Комментарии:
1. Я выполнил шаблон и вставил
{{ (index . 1).Heading }}
HTML-файл, но он напечатал весь HTML-код. Хотя я пытаюсь показать это в браузере.2. Ваш шаблон отображает готовый HTML-документ? Начинается ли оно с
<html>
? Также проверьте ошибку , возвращеннуюTemplate.Execute()
.3. Это сработало. Я изменил
os.Stdout
w
и отобразил его в HTML-файле. Спасибо, icza!4. @SumbaloDi Да,
os.Stdout
было просто протестировать / продемонстрировать, что это работает. В обработчиках HTTP вы должны использоватьw
для записи в HTTP-ответ.