我正在尝试构建一个小型Web应用程序,并且我希望将所有CSS文件放在一个文件夹中,并让它们自动加载到所有网页上(有点像Rails资产管道)。
我正在使用它来提供css文件,但是如何让它们加载所有页面?
http.Handle("/css/", http.StripPrefix("/css/", http.FileServer(http.Dir("/css/"))))
答案 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
}