B.9. Template: Render Specific HTML Template
Pada chapter ini kita akan mempelajari cara render template html tertentu untuk dijadikan output pengaksesan endpoint. Sebuah file view bisa berisikan banyak template. Template mana yang ingin di-render bisa ditentukan.
B.9.1. Front End
Siapkan folder project baru, buat file template bernama view.html, lalu isi dengan kode berikut.
{{define "index"}}
<html>
<head>
<title>Learning html/template Functions</title>
</head>
<body>
<h2>Index</h2>
</body>
</html>
{{end}}
{{define "test"}}
<html>
<head>
<title>Other Template</title>
</head>
<body>
<h2>Test</h2>
</body>
</html>
{{end}}
Pada file view di atas, terlihat terdapat 2 template didefinisikan dalam 1 file, template index dan test.
- Template
indexditampilkan ketika rute/diakses - Template
testditampilkan ketika rute/testdiakses
B.9.2. Back End
Selanjutnya siapkan kode di sisi back-end, buat file main.go, tulis kode berikut.
package main
import "net/http"
import "fmt"
import "html/template"
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
var tmpl = template.Must(template.New("index").ParseFiles("view.html"))
if err := tmpl.Execute(w, nil); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
})
http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
var tmpl = template.Must(template.New("test").ParseFiles("view.html"))
if err := tmpl.Execute(w, nil); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
})
fmt.Println("server started at localhost:9000")
http.ListenAndServe(":9000", nil)
}
Pada kode di atas bisa dilihat, terdapat 2 rute yang masing-masing mem-parsing file yang sama, tapi spesifik template yang dipilih untuk di-render berbeda.
Contoh di rute /, sebuah template dialokasikan dengan nama index, kemudian di-parsing-lah view bernama view.html menggunakan method ParseFiles(). Go secara cerdas melakukan pencarian dalam file view tersebut, apakah ada template yang namanya adalah index atau tidak. Jika ada maka ditampilkan. Hal ini juga berlaku pada rute /test, jika isi dari template bernama test ada maka ditampilkan.
B.9.3. Testing
Lakukan tes pada program yang telah kita buat, kurang lebih hasilnya seperti pada gambar berikut.
