gpt4 book ai didi

go - 模板部分呈现为纯文本

转载 作者:IT王子 更新时间:2023-10-29 02:00:43 26 4
gpt4 key购买 nike

我在尝试通过 Go html 模板放入一件特定的东西时遇到了问题。

(为简洁起见,所有内容都将被压缩/简化)

我有一个 base 模板:

<html>
<head>
<title>{{ .Title }}</title>
</head>
<body>
{{ template .PageBody . }}
</body>
</html>

还有一个设备模板:

{{ 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。

最佳答案

解决方案比我想象的要简单得多。我没有使用正确的措辞来找到这个 SO 答案,但它完美地解决了这个问题:Go template.ExecuteTemplate include html

要点是我需要制作 DeviceLinkList输入 template.HTML而不是字符串,当我给它赋值时,它需要是 deviceData.DeviceLinkList = template.HTML("<ul><li>list1</li><li>list2</li></ul>")

关于go - 模板部分呈现为纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55911795/

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