NumberOfGraham
NumberOfGraham

Reputation: 51

Loading CSS files from a folder in Go

I'm trying to build a small web app, and I'd like to have all my CSS files in one folder, and have them load automatically on all web pages (sort of like the Rails asset pipeline).

I'm using this to serve the css files, but how would I get them to load with all pages?

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

Upvotes: 2

Views: 680

Answers (2)

doun
doun

Reputation: 79

I think it's easy to implement this simple asset pipeline feature, you can use path.filepath to walk through your css directory, read all the css files, generate a temp css file by join all lines together, then serve the client with the generated file

import (
"path/filepath"
"os"
"io/ioutil"
)

func Generate(path string) *os.File{
f,err := ioutil.TempFile("","all")
if err!=nil{
    return nil
}

filepath.Walk(path,func(p string,info os.FileInfo,err error)error{
    if err!=nil{
        return err
    }
    if !info.IsDir(){
        data,err := ioutil.ReadFile(info.Name())
        if err!=nil{
            return err
        }
        f.Write(data)
    }
    return err
})
return f
}

Upvotes: 2

miltonb
miltonb

Reputation: 7355

One solution is to make use of the html/template functionality, create all your pages to include the same section like below. I would however leave room to add tags to your head by leaving the in each of your pages.

{{define "page_template"}}
<head>
    <title>My page template</title>
    {{template "template_css"}}
    <!-- page specific css if required -->
    <link rel="stylesheet" type="text/css" href="/assets/additional.css" />
</head>
... etc ...

And the template_css:

{{define "template_css"}}
<link rel="stylesheet" type="text/css" href="/assets/allpages.css" />
{{end}}

A snippet of code for the template parsing

tp, err := template.ParseFiles("page_template.html", "template_css.tp")
err = tp.ExecuteTemplate(buf, "page_template", templateParameters)

Upvotes: 2

Related Questions