Golang 的“html/template”包中的 HTML() 函数有问题

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


Go 文档说我可以简单地使用该HTML()函数将字符串转换为 a type HTML,这被认为是安全的并且应该被解析为 HTML。我已经Content在我的type Pagea 中创建了我的字段template.HTML,它编译得很好,但是当我template.HTML(content)在第 53 行中使用该函数时,我收到一个编译器错误说:


template.HTML undefined (type *"html/template".Template has no field or method HTML)


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


undefined: HTML


我的最终目标是让其他 HTML 文件解析index.html为 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)

}


慕容708150
浏览 407回答 2
2回答

幕布斯6054654

您正在使用名为 template 的变量隐藏您的包。最简单的解决方法可能是将变量名称更改为 tmpl 或其他名称。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go