gpt4 book ai didi

html - Golang 的 "html/template"包中的 HTML() 函数出现问题

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

我在获取 "html/template" 包以正确解析模板时遇到问题。我正在尝试将 HTML 内容解析为我制作的模板页面,但是,当我尝试时,解析的页面以转义的 HTML 而不是我想要的实际代码结束。

The Go documentation说我可以简单地使用 HTML() 函数将字符串转换为 type HTML,这是安全的,应该作为 HTML 解析。我在我的 type Page 中将我的 Content 字段设为 template.HTML,它编译得很好,但是当我使用 模板时.HTML(content) 函数在第 53 行,我得到一个编译器错误:

template.HTML 未定义(类型 *"html/template"。Template 没有字段或方法 HTML)

使用 HTML(content)(没有前面的 template.)会导致此错误:

未定义:HTML

我的最终目标是让其他 HTML 文件解析为 index.html 并被浏览器解释为 HTML。

感谢任何帮助。

package main

import (
"fmt"
"html/template"
"io"
"io/ioutil"
"net/http"
"regexp"
"strings"
)

func staticServe() {
http.Handle(
"/assets/",
http.StripPrefix(
"/assets/",
http.FileServer(http.Dir("assets")),
),
)
}

var validPath = regexp.MustCompile("^/(|maps|documents|residents|about|source)?/$")


// This shit is messy. Clean it up.

func servePage(res http.ResponseWriter, req *http.Request) {
type Page struct {
Title string
Content template.HTML
}

pathCheck := validPath.FindStringSubmatch(req.URL.Path)
path := pathCheck[1]
fmt.Println(path)

if path == "" {
path = "home"
}

template, err := template.ParseFiles("index.html")
if err != nil {
fmt.Println(err)
}

contentByte, err := ioutil.ReadFile(path + ".html")
if err != nil {
fmt.Println(err)
}
content := string(contentByte)

page := Page{strings.Title(path) + " - Tucker Hills Estates", template.HTML(content)}

template.Execute(res, page)
}

// Seriously. Goddamn.

func serveSource(res http.ResponseWriter, req *http.Request) {
sourceByte, err := ioutil.ReadFile("server.go")
if err != nil {
fmt.Println(err)
}
source := string(sourceByte)
io.WriteString(res, source)
}

func main() {
go staticServe()
http.HandleFunc("/", servePage)
http.HandleFunc("/source/", serveSource)
http.ListenAndServe(":9000", nil)
}

最佳答案

前面导入了“html/template”,这一行

template, err := template.ParseFiles("index.html")

隐藏了模板包,所以当您稍后执行 template.HTML 时,您正在寻找模板对象上的 HTML 属性,而不是用于称为 包中的 HTML

为防止这种情况发生,请更改变量的名称。

tmpl, err := template.ParseFiles("index.html")

关于html - Golang 的 "html/template"包中的 HTML() 函数出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20808381/

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