gpt4 book ai didi

html - 获取模板以在 Golang 中正确读取 CSS 文件

转载 作者:IT王子 更新时间:2023-10-29 02:15:17 27 4
gpt4 key购买 nike

您好,我在让我的模板正确显示我的 CSS 文件时遇到了问题。它正在正确读取我的 imgs,但我的 CSS 文件中的任何内容都无法正确显示。当我运行 Delve 时,它​​会正确获取路径,所以我不确定发生了什么。这是我的代码。

package main

import (
"bufio"
"log"
"net/http"
"os"
"strings"
"text/template"
)

func main() {
templates := populateTemplates()

http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
requestedFile := req.URL.Path[1:]
template := templates.Lookup(requestedFile + ".html")

if template != nil {
template.Execute(w, nil)
} else {
w.WriteHeader(404)
}
})

http.HandleFunc("/img/", serveResource)
http.HandleFunc("/css/", serveResource)

http.ListenAndServe(":8080", nil)
}

func serveResource(w http.ResponseWriter, req *http.Request) {
path := "../../public" + req.URL.Path
var contentType string
if strings.HasSuffix(path, ".css") {
contentType = "text/css"
} else if strings.HasSuffix(path, ".png") {
contentType = "image/png"
} else {
contentType = "text/plain"
}

f, err := os.Open(path)
if err != nil {
w.WriteHeader(404)
} else {
defer f.Close()
w.Header().Add("Content Type", contentType)

br := bufio.NewReader(f)
br.WriteTo(w)
}
}

func populateTemplates() *template.Template {
result := template.New("templates")

basePath := "../../templates"
templateFolder, err := os.Open(basePath)
if err != nil {
log.Fatal(err)
}
defer templateFolder.Close()

templatePathsRaw, _ := templateFolder.Readdir(-1)

templatePaths := new([]string)
for _, pathInfo := range templatePathsRaw {
if !pathInfo.IsDir() {
*templatePaths = append(*templatePaths, basePath+"/"+pathInfo.Name())
}
}

result.ParseFiles(*templatePaths...)

return result
}

(也在 http://pastebin.com/7Vcm5t75 上)

我有一个主文件夹,其中包含 bin、pkg、src、public 和模板。然后在 src 中是一个主文件夹,其中包含 main.go。公共(public)包含 img、css、脚本。 Img 里面有我的图片。 CSS 中有我的 CSS 文件。然后模板中有我的两个 html 页面。如下图所示:

├── bin
├── pkg
├── public
│   ├── css
│   ├── img
│   └── scripts
├── src
│   └── main
└── templates

非常感谢任何帮助。

最佳答案

使用上面来自 elithrar 的提示并将我的 serveResource 函数更改为如下所示:

func serveResource(w http.ResponseWriter, req *http.Request) {
path := "../../public" + req.URL.Path
http.ServeFile(w, req, path)
}

我的问题现已解决。谢谢!

关于html - 获取模板以在 Golang 中正确读取 CSS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33990145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com