Ich beginne gerade mit Go, und ich möchte damit eine Web App erstellen. Was ich jetzt versuche ist, das Template in einer Lenker-ähnlichen Art zu verwenden. Ich möchte meine Kopf- und Fußzeile aus meiner Hauptseite ziehen, damit ich sie auf jeder Webseite einfügen kann.HTML Partials in GoLang
Meine aktuelle Einrichtung soll HTML-Dateien der Startseite, der Kopfzeile und der Fußzeile analysieren und zwischenspeichern. Dann führe ich meine home.html Vorlage aus, die Felder für die Seiten Titel, die Datei header.html und die Datei footer.html enthält.
Immer wenn ich nach ähnlichen Seiten suche, sehe ich nur Javascript-Seiten, also wenn das ein repost ist, lassen Sie mich wissen, wo ich suchen soll.
edit: Ich habe meinen Code aktualisiert Tipps von den Antworten von @Minty und @putu zu nehmen. Ich versuche, die HTML-Dateien zu lesen und sie in einer Datenzuordnung zu speichern, während ich auch die Vorlage zu meinen Vorlagen hinzufüge. Es gibt einige neue Bugs, die ich an Squashing arbeite, daher wird die Site derzeit nicht gerendert. Aber, wenn es irgendwelche neuen Tipps gibt, die Sie geben können, würde das viel helfen.
server.go
package main
import (
"html/template"
"io/ioutil"
"net/http"
"regexp"
)
var tPath = "./temps/"
var dPath = "./data/"
var templates = template.Must(template.ParseFiles(tPath+"home.html", dPath+"header.html", dPath+"footer.html"))
var validPath = regexp.MustCompile("^/")
func rootHandler(wr http.ResponseWriter, req *http.Request) {
title := "home"
headerFile, headErr := ioutil.ReadFile(dPath + "header.html")
footerFile, footErr := ioutil.ReadFile(dPath + "footer.html")
if headErr != nil || footErr != nil {
http.Error(wr, headErr.Error(), http.StatusInternalServerError)
http.Error(wr, footErr.Error(), http.StatusInternalServerError)
}
data := map[string]interface{}{
"Title": title,
"Header": string(headerFile),
"Footer": string(footerFile),
}
err := templates.ExecuteTemplate(wr, title+".html", data)
if err != nil {
http.Error(wr, err.Error(), http.StatusInternalServerError)
}
}
func main() {
http.HandleFunc("/", rootHandler)
http.ListenAndServe(":8080", nil)
}
home.html:
{{define "homeHTML"}}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{.Title}} - MySite</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
{{.Header}}
<h1>Welcome!</h1>
{{.Footer}}
</body>
</html>
{{end}}
header.html:
{{define "headerHTML"}}
<header>
<h1>MySite</h1>
<br>
<nav>
<a href="/">Home</a>
</nav>
</header>
{{end}}
footer.html
{{define "footerHTML"}}
<footer>
<p>Thank You for Visiting</p>
</footer>
{{end}}
meine neue Lösung prüfen, seine volle Arbeitsbeispiel. Kopieren Sie einfach die Paste richtig und es wird funktionieren – Minty