Как распечатать спецификацию в HTML-файле с помощью golang?

# #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-ответ.