У меня проблемы с одной конкретной вещью, которую я пытаюсь использовать в шаблонах Go html.
(для краткости все будет сжато / упрощенно)
У меня есть один base
шаблон:
<html>
<head>
<title>{{ .Title }}</title>
</head>
<body>
{{ template .PageBody . }}
</body>
</html>
И device
шаблон:
{{ define "device" }}
<div class="nav">
<div class="links">
{{ .DeviceLinkList }}
</div>
</div>
<div class="textData">
<div class="deviceNick">
{{ .Nickname }}
</div>
</div>
{{ end }}
То, как я это настроил, выглядит примерно так:
В файле main.go
:
package main
import "html/template" //among others, of course.
var err error
var tmplInit *template.Template
type TemplVals struct{
Title string
Version string
Release string
PageBody string
}
var templVals TemplVals
func init(){
// Prepare GOHTML templates
tmplInit, err = template.ParseGlob("./html_templates/*.gohtml")
if err != nil { log.Panic("Cant load templates! ", err) }
templVals.Version = serverDetails["version"]
templVals.Release = serverDetails["release"]
}
//Main only has MUX routing using Gorilla Mux
В файле deviceController.go
:
type DeviceValues struct{
DeviceLinkList string
Nickname string
Title string
}
func home(w http.ResponseWriter, r *http.Request){
w.Header().Set("Content-Type", "text/html; charset=utf-8")
var deviceData DeviceValues
// Seems to not be loaded as HTML when passed to template?
deviceData.DeviceLinkList = loadDeviceList("example")
deviceData.Nickname = loadDeviceData("example")
deviceData.PageBody = "device"
deviceData.Title = "Home"
tmplErr := tmplInit.Execute(w, deviceData)
if tmplErr != nil{ log.Panic(tmplErr) }
}
func loadDeviceList(user string)(string){
var deviceid, linkList string
linkList = `<ul>`
for getIDs.Next(){
err = getIDs.Scan(&deviceid) // SQL gathers this
if err != nil { panic(err) }
linkList = linkList + `<li><a href="#" onclick="loadDevice('`+deviceid+`')">`+deviceid+`</a></li>`
}
linkList = linkList + `</ul>`
return linkList
}
func loadDeviceData(user string)(string){
//SQL retrieves data for devices associated to passed in user
//for brevity:
return "Example Nickname"
}
Проблема в том, что псевдоним загружен правильно, и есть другие поля, такие как уровни заряда батареи и показания датчиков, которые проходят через все должным образом и могут даже использоваться в функциях JS, но DeviceLinkList отображается в обычной строке независимо от того, что я делать. Это не список, он просто извлекает HTML как есть.