我被卡住了。我一直在尝试使用page作为模板的Golang模板来创建母版页。我已经设法通过正确更新了CSS和JS目录的方式启动了Go服务器,但是我只能加载index.html
页而不是about.html
页。 Github link here
我已经在here和here中尝试了解决方案,但是没有运气,关于页面和索引页面都在同一目录中,并且共享相同的页眉,页脚和导航栏模板。
我还尝试使用template.Must(template.ParseFiles("header.html", .....
手动解析文件,还尝试使用名称为templ.ExecuteTemplate(w, "about.html", &Page{Title: "About TL;DR"})
的.html执行,这不会返回错误,而是仅加载空白屏幕。任何帮助将不胜感激,在此先感谢您!
文件目录:
servermain.go
package main
import (
"fmt"
"html/template"
"log"
"net/http"
"os"
"path/filepath"
"strings"
)
//Page title
type Page struct {
Title string
}
//------------------------------Global Variables-------------------------------------//
//Compile templates on start
var templ = ParseTemplates()
//ParseTemplates use for multi directory html parsing
func ParseTemplates() *template.Template {
t := template.New("Base")
err := filepath.Walk("./", func(path string, info os.FileInfo, err error) error {
if strings.Contains(path, ".html") {
_, err = t.ParseFiles(path)
fmt.Println(path)
if err != nil {
logger.Println(err)
fmt.Println(err)
}
}
return err
})
if err != nil {
panic(err)
}
return t
}
//logging
var errorlog *os.File
var logger *log.Logger
//---------------------------------------Page Handlers----------------------------------//
//Handler for homepage
func homepageHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("Home")
err := templ.ExecuteTemplate(w, "index", &Page{Title: "Welcome to TL;DR"})
if err != nil {
fmt.Println(err)
logger.Println(err)
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
//Handler for about page
func aboutHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("About")
err := templ.ExecuteTemplate(w, "about", &Page{Title: "About TL;DR"})
if err != nil {
fmt.Println(err)
logger.Println(err)
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
//Server log to file
func init() {
errorlog, err := os.OpenFile("serverlog.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Printf("Error opening file: %v", err)
os.Exit(1)
}
log.SetOutput(errorlog)
logger = log.New(errorlog, "\r\nTDLR : ", log.Lshortfile|log.LstdFlags)
}
func main() {
//--------------------------------------Routers-------------------------------------//
http.HandleFunc("/", homepageHandler)
http.HandleFunc("/index", homepageHandler)
http.HandleFunc("/about", aboutHandler)
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
//---------------------------------------------------------------------------------//
//start server
fmt.Println("Starting server on port 9090")
logger.Println("Starting server on port 9090")
logger.Fatal(http.ListenAndServe(":9090", nil))
}
错误页面
我也注意到,无论加载到哪个页面,它都会在执行homepageHandler
之后始终执行aboutHandler
,就像在控制台中看到的那样。
编辑:已解决20181215
about.html
模板定义不正确,更改为{{define "about"}}
解决了该问题。
答案 0 :(得分:0)
我在PC上测试了您的代码,效果很好。
如果您看到带有about.html(名称为.html)的空白屏幕,则可能是模板的问题。
确保在about.html
{{.Title}}