最新消息:欢迎加入小松的QQ群一起讨论一起学习,搜索页面修改成lua+ElasticSearch,使用php这个页面速度相对慢一点,优化之后速度杠杠的,如有问题请加群联系我

go html/template模板输出html

golang 382浏览 0评论

我在学习go语言,并且尝试写一个博客,数据库用的还是wordpress的数据库,没有使用go语言的框架,想用原生的go写
在使用html/template 模板包的时候发现没有办法输出html,主要我想把博客的内容输出来,结果显示

html竟然转义了

查看官方的说明文档
官方说明
https://golang.org/pkg/html/template/

比如你想输出

Hello, <b>World</b>!

网页上源码上会显示

Hello, &lt;b&gt;World&lt;b&gt;!

解决方法

template.HTML("<b>World</b>")

在写的是这段代码的时候查数据库时候,然后模板输出html代码,搞了很久,现在把实例代码贴出来

package main

import (
    "database/sql"
    "fmt"
    "html/template"
    "log"
    "net/http"

    _ "github.com/go-sql-driver/mysql"
    "github.com/gorilla/mux"
)

var (
    db        *sql.DB
    db_prefix = "so_"
    //config config.Config
    //v      config.Vars
    t = template.Must(template.ParseGlob("views/*"))
)

type post struct {
    ID           int
    Post_title   string
    Post_content template.HTML//设置博文的格式
    Post_date    string
}

func init() {
    //db, _ = sql.Open("mysql", "root:root@/wordpress?charset=utf8")
    db, _ = sql.Open("mysql", "test:123456@/wordpress?charset=utf8")
}

func main() {

    r := mux.NewRouter()
    r.HandleFunc("/", HomeHandler)
    r.HandleFunc("/{page:[0-9]+}.html", HomeHandler)
    log.Fatal(http.ListenAndServe(":9090", r))
}

/*首页*/
func HomeHandler(w http.ResponseWriter, r *http.Request) {

    page := mux.Vars(r)["page"]
    if page != "" {
        page = "1"
    }

    rows, err := db.Query("SELECT ID,post_title,post_content,post_date FROM " + db_prefix + "posts ORDER BY ID DESC LIMIT 1,10")

    defer rows.Close()
    if err != nil {
        log.Fatal(err.Error())
    }
    posts := []post{}
    for rows.Next() {
        p := post{}
        var Post_content string
        rows.Scan(&p.ID, &p.Post_title, &Post_content, &p.Post_date)
        p.ID = p.ID
        p.Post_title = p.Post_title
        p.Post_content = template.HTML(Post_content)//转换博客的类型
        p.Post_date = p.Post_date

        posts = append(posts, p)
    }

    fmt.Println(posts)

    renderTemplate(w, "index.html", posts)
}

/*模板解析*/
func renderTemplate(w http.ResponseWriter, tmpl string, data interface{}) {
    err := t.ExecuteTemplate(w, tmpl, data)
    if err != nil {
        http.Error(w, "error 500:"+" "+err.Error(), http.StatusInternalServerError)
    }
}
QQ交流群:136351212(满) 455721967

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
转载保留版权:小松博客» go html/template模板输出html
本文链接地址:https://www.phpsong.com/3208.html

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
木有头像就木有JJ!点这里按步骤申请Gravatar头像吧!

网友最新评论 (4)

加载中,请稍候...
  1. 您好,您的网站做的很不错,很漂亮,我已经收藏了,方便我随时访问.
    电动螺旋压力机2017-05-31 16:35:50回复
    • 感谢来访
      小松2017-06-02 08:54:20回复
  2. 介绍的不错 可惜小白不会
    宝宝计划客户端2017-05-31 17:09:42回复
    • 感谢来访
      小松2017-06-02 09:25:16回复