26

このチュートリアルに従って、非常に基本的なWebアプリケーションを作成しました。外部スタイルシートにcssルールを追加したいのですが、機能しません。HTMLテンプレートがレンダリングされると、問題が発生し、CSSが完全に無視されます。ルールをタグに入れると機能しますが、それに対処する必要はありません。

Go Webアプリケーションで、外部CSSスタイルシートをレンダリングするにはどうすればよいですか?

4

1 に答える 1

37

指定されたディレクトリからの静的ファイルの提供を処理するハンドラを追加します。

例えば。{server.go directory}/resources/ を作成して使用

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

/resources/somethingsomething.css とともに

StripPrefix を使用する理由は、提供されるディレクトリを好きなように変更できますが、HTML での参照は同じままにしておくためです。

例えば。/home/www/ から提供する

http.Handle("/resources/", http.StripPrefix("/resources/", http.FileServer(http.Dir("/home/www/"))))

これにより、リソース ディレクトリの一覧が開いたままになることに注意してください。それを防ぎたい場合は、go スニペット ブログに適切なスニペットがあります。

http://gosnip.posterous.com/disable-directory-listing-with-httpfileserver

編集: Posterous はなくなったので、golang メーリング リストからコードを取り出して、ここに投稿します。

type justFilesFilesystem struct {
    fs http.FileSystem
}

func (fs justFilesFilesystem) Open(name string) (http.File, error) {
    f, err := fs.fs.Open(name)
    if err != nil {
        return nil, err
    }
    return neuteredReaddirFile{f}, nil
}

type neuteredReaddirFile struct {
    http.File
}

func (f neuteredReaddirFile) Readdir(count int) ([]os.FileInfo, error) {
    return nil, nil
}

それについて議論している元の投稿: https://groups.google.com/forum/#!topic/golang-nuts/bStLPdIVM6w

上記の行の代わりに、次のように使用します。

 fs := justFilesFilesystem{http.Dir("resources/")}
 http.Handle("/resources/", http.StripPrefix("/resources/", http.FileServer(fs)))
于 2012-11-09T07:32:54.137 に答える