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 index ditampilkan ketika rute / diakses
  • Template test ditampilkan ketika rute /test diakses

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.

Dasar Pemrograman Golang - Rute `/` dan `/test`