【问题标题】:Rendering CSS in a Go Web Application在 Go Web 应用程序中渲染 CSS
【发布时间】:2012-10-29 09:58:30
【问题描述】:

我按照this 教程编写了一个非常基本的 Web 应用程序。我想在外部样式表中添加 css 规则,但它不起作用 - 当呈现 HTML 模板时,出现问题并且 CSS 被完全忽略。如果我将规则放在标签中,它会起作用,但我不想处理它。

在 Go Web 应用程序中,如何呈现外部 CSS 样式表?

【问题讨论】:

  • 您确定要链接的 CSS 文件的路径正确吗?你能评论一下你用来链接到你的样式表的 标签吗?
  • 我的其余代码看起来完全像这样:golang.org/doc/articles/wiki/final.go 加上两个作为模板的 html 文件(edit.html 和 view.html)。一切都在同一个文件夹中。这是我的 标签:
  • 你能用你的 CSS 更新问题吗?如果您在 CSS 中有任何语法错误(即缺少冒号),可能会导致整个内容无法正确呈现。
  • 好吧,我现在不在那台机器上,但也许我会在。 Thibg 是,我将 CSS 直接复制到样式标签中并且效果很好,但是一旦我将它放入链接标签和外部样式表中,它就停止了工作。

标签: html css web-applications go


【解决方案1】:

添加一个处理程序来处理来自指定目录的静态文件。

例如。创建 {server.go 目录}/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 sn-p 博客上有一个很好的 sn-p:

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)))

【讨论】:

  • 有效。我不得不在 Firefox 中使用 ctrl+shift+r 刷新
  • @rofrol 必须从缓存中加载;)
猜你喜欢
  • 2021-07-08
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2018-08-31
  • 2013-10-08
  • 2010-12-19
相关资源
最近更新 更多