Friday, August 28, 2020

Convert templates to use view Types

 

package main

import (
"github.com/gorilla/mux"
"html/template"
"net/http"
)

var (
homeTemplate *template.Template
contactTemplate *template.Template
)

func home(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
//fmt.Fprint(w, "<h1>Welcome to my awesome site</h1>")
if err := homeTemplate.Execute(w, nil); err != nil {
panic(err)
}
}

func contact(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
//fmt.Fprint(w, "<h1>Contact page</h1>")
if err := contactTemplate.Execute(w, nil); err != nil {
panic(err)
}
}

func main() {
var err error
homeTemplate, err = template.ParseFiles(
"views/home.gohtml",
"views/layouts/footer.gohtml",
)
if err != nil {
panic(err)
}
contactTemplate, err = template.ParseFiles(
"views/contact.gohtml",
"views/layouts/footer.gohtml",
)
if err != nil {
panic(err)
}
r := mux.NewRouter()
r.HandleFunc("/", home)
r.HandleFunc("/contact", contact)
http.ListenAndServe(":3000", r)
}


<h1>Welcome to my awesome site...</h1>

{{template "footer"}}
 
 
{{define "footer"}}
<footer>
<p>This is the footer</p>
</footer>
{{end}}












//View Type

package views

import "html/template"

type View struct {
Template *template.Template
}

func NewView(files ...string) *View {
files = append(files, "views/layouts/footer.gohtml")
t, err := template.ParseFiles(files...)
if err != nil {
panic(err)
}
return &View{
Template: t,
}
}




package main

import (
"awesomeProject/views"
"github.com/gorilla/mux"
"net/http"
)

var (
homeView *views.View
contactView *views.View
)

func home(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
//fmt.Fprint(w, "<h1>Welcome to my awesome site</h1>")
if err := homeView.Template.Execute(w, nil); err != nil {
panic(err)
}
}

func contact(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
//fmt.Fprint(w, "<h1>Contact page</h1>")
if err := contactView.Template.Execute(w, nil); err != nil {
panic(err)
}
}

func main() {
homeView = views.NewView("views/home.gohtml")
contactView = views.NewView("views/contact.gohtml")

r := mux.NewRouter()
r.HandleFunc("/", home)
r.HandleFunc("/contact", contact)
http.ListenAndServe(":3000", r)
}
Share This:    Facebook Twitter
Scroll To Top