2013-11-25 39 views
2

我正在嘗試構建一個小型Web應用程序,並且希望將所有CSS文件放在一個文件夾中,並讓它們在所有網頁上自動加載(有點像Rails資產管道)。在Go中加載文件夾中的CSS文件

我正在使用它來提供css文件,但是如何讓它們加載所有頁面?

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

將它們包含在您的輸出中? ._。 – thwd

+0

加載所有頁面是什麼意思?響應取決於客戶端請求。 – Gizak

+0

因爲,我希望能夠在我服務的所有html頁面中的/ css /文件夾中使用CSS樣式(無需手動將它們包含在html中) – NumberOfGraham

回答

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

要添加到此項,很可能是您最終會定義多個片段:'head','top','XXXXX_page','footer'等,甚至可能包含一些包含腳本的片段(您可能不需要在所有頁面上使用這些片段。有5-6個「包含」,所以我可以模塊化他們儘可能多 – elithrar

+0

雖然這似乎是一個很好的方式做到這一點,仍然有代碼必須在每個頁面上重複我正在尋找一種方法來做這不需要將它包括在每個html頁面上(例如,以某種方式將{{template「template_css」}}添加到每個傳遞給template.ParseFiles()的html頁面) – NumberOfGraham

2

我認爲這是很容易實現這個簡單的資產管道特徵的片段,您可以使用路徑。 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 
} 
+0

,因爲可以直接將css文件連接在一起 – doun

相關問題