如何使用blackfriday为golang模板(html或tmpl)渲染markdown?

Ari*_*vil 14 html markdown render go martini

我使用Martini框架,我有一些markdown文件,我想在tmpl/html模板中将其渲染为HTML.

降价文件如下:

title: A Test Demo
---
##ABC
> 123
Run Code Online (Sandbox Code Playgroud)

和模板文件如下:

<head>
  <title>{{name}}</title>
</head>

<body>
  <h2>{{abc}}</h2>
  <blockquote>
    <p>{{xyz}}</p>
  </blockquote>
</body>
Run Code Online (Sandbox Code Playgroud)

我使用blackfriday解析markdown和return []byte类型,下一步我想将markdown文件渲染到这个模板并将每个块放到正确的位置,那么我该怎么做呢?或者用任何方式更好地做到这一点?

Int*_*net 24

实现此目的的一种方法是使用Funcs方法将自定义函数添加到模板函数映射.有关详细信息,请参阅模板包文档的" 函数"部分.

给定一个模板文件page.html,一些作家w(可能的http.ResponseWriter),以及一些结构p与字段Body包含将被放入一个模板字段,你可以这样做:

定义一个功能:

func markDowner(args ...interface{}) template.HTML {
    s := blackfriday.MarkdownCommon([]byte(fmt.Sprintf("%s", args...)))
    return template.HTML(s)
}
Run Code Online (Sandbox Code Playgroud)

将其添加到模板功能图:

tmpl := template.Must(template.New("page.html").Funcs(template.FuncMap{"markDown": markDowner}).ParseFiles("page.html"))
Run Code Online (Sandbox Code Playgroud)

执行模板:

err := tmpl.ExecuteTemplate(w, "page.html", p)
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
}
Run Code Online (Sandbox Code Playgroud)

然后,在您的模板文件中,您可以输入以下内容:

{{.Body | markDown}}
Run Code Online (Sandbox Code Playgroud)

它将Body通过你的markDowner功能.

操场