15

I setup a route in server.js in package main in root directory of project

http.HandleFunc("/",route.IndexHandler)

The IndexHandler is implemented in package route like this:

func IndexHandler(w http.ResponseWriter, r *http.Request) {
    data:=struct{
        Name string
    }{
        "My name",
    }
    util.RenderTemplate(w, "index", data)
}

The RenderTemplate function is implemented in package util like this:

func RenderTemplate(w http.ResponseWriter, tmpl string, data interface{}) {
    cwd, _ := os.Getwd()
    t, err := template.ParseFiles(filepath.Join(cwd, "./view/" + tmpl + ".html"))
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    err = t.Execute(w, data)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

Directory structure in project like this:

/
/public/css
/public/images
/public/js
/route
/view

index.html view is located in folder view, router is in folder route

In index.html I include resources like these:

<link rel="stylesheet" type="text/css" href="../public/css/style.css">

<img src="../public/images/img_landing_page_mac.png">

When request the appropriate path, index.html is still rendered, but images and stylesheet are not loaded. How can I do to include them in Golang html template engine?

2 Answers 2

16

You need to explicitly ask your server to serve static files.

See http.FileServer

In your case register another handler.

http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(http.Dir("public"))))
Sign up to request clarification or add additional context in comments.

Comments

3

Like Aruna said, register a static file server handle

http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(http.Dir("public"))))

And to use the files in your HTML, simply

<img src="/public/images/img_landing_page_mac.png">

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.