从Go中的文件夹加载CSS文件

时间:2013-11-25 16:03:30

标签: go

我正在尝试构建一个小型Web应用程序,并且我希望将所有CSS文件放在一个文件夹中,并让它们自动加载到所有网页上(有点像Rails资产管道)。

我正在使用它来提供css文件,但是如何让它们加载所有页面?

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

2 个答案:

答案 0 :(得分:2)

一种解决方案是利用html /模板功能,创建所有页面以包含相同的部分,如下所示。但是,我会留下空间,通过在每个页面中留下标签来添加标签。

{{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 ...

还有template_css:

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

模板解析的代码片段

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

答案 1 :(得分:2)

我认为实现这个简单的资产管道功能很容易,您可以使用path.filepath遍历您的css目录,读取所有css文件,通过将所有行连接在一起生成临时css文件,然后使用生成的文件

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
}