登录
首页 >  Golang >  Go问答

在Go中如何使HTML模板识别字符串为HTML

来源:stackoverflow

时间:2024-02-08 11:39:23 498浏览 收藏

大家好,我们又见面了啊~本文《在Go中如何使HTML模板识别字符串为HTML》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我有一个来自 go docs 教程的 wiki web 应用程序,并且想要添加一些内容。其中之一是首页上所有 wiki 条目的列表。我有一个如下所示的 html 模板:

<h1>this is the front page of the wiki</h1>

<p>here is the list of entries:</p>
<div>
    <ul>

        {{printf "%s" .body}}
        
    </ul>
</div>

这是页面的处理程序

func fronthandler(w http.responsewriter, r *http.request){
    entries := getentries()
    p := &page{title: "frontpage", body:  []byte(entries)}

    rendertemplate(w, "front", p)

}

我已经将条目列表格式化为 html 中的 ul,它是一个字符串拼接,将其转换为字节拼接,其格式如下:

<li><a href="/view/page1">page1</a></li>
<li><a href="/view/page2">page2</a></li>

等等,所以我想将其呈现为 html 而不是像现在这样的纯文本。

我尝试更改将页面主体从字节拼接传递到字符串的方式,并且得到了相同的结果。我尝试更改渲染页面的方式,以采用专门为首页制作的不同结构作为解决方法,但它也没有效果。这是我渲染模板的方式

func renderTemplate(w http.ResponseWriter, tmpl string, p *Page){
    err := templates.ExecuteTemplate(w, tmpl + ".html", p)
    if err != nil{
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

我还尝试了几种不同的方式在 .html 文件中显示它而不是 {{printf "%s" .body"}} 但我没有成功。

非常感谢任何帮助,也请告诉我是否应该提供更多信息。


正确答案


您可以使用Typed strings

根据文档:

示例:

base.html

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="x-ua-compatible" content="ie=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>document</title>
  </head>
  <body>
    <div>
      <ul>
        {{range .}}{{.}}{{end}} <!-- loop over the pipeline(.) -->
      </ul>
    </div>
  </body>
</html>
func frontHandler(w http.ResponseWriter, r *http.Request) {

    entry := []string{"<li><a href=\"/view/page1\">page1</a></li>", "<li><a href=\"/view/page2\">page2</a></li>"}
    tmpl, err := template.ParseFiles("base.html")
    if err != nil {
        log.Fatal("Unable to parse")
    }

    // template.HTML takes only one string, hence we loop over the entry slice 
    //and store the slice values in htmlvalues of `HTML` type
    var htmlvalues []template.HTML 

    for _, n := range entry {
        htmlEncapsulate := template.HTML(n)
        htmlvalues = append(htmlvalues, htmlEncapsulate)
    }
    tmpl.Execute(w, htmlvalues)

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>