我使用Martini框架,我有一些markdown文件,我想在tmpl / html模板中将其呈现为
HTML.
这样的markdown文件:
title: A Test Demo --- ##ABC > 123
和模板文件如下所示:
<head> <title>{{name}}</title> </head> <body> <h2>{{abc}}</h2> <blockquote> <p>{{xyz}}</p> </blockquote> </body>
我使用blackfriday解析markdown并返回[]字节类型,下一步我想将markdown文件渲染到此模板,并将每个块放在正确的位置,那么我该如何正确地做到这一点?还是用任何方式做得更好?
实现这一点的一个方法是使用
Funcs方法向模板功能图添加自定义函数.有关更多信息,请参阅
the template package docs的功能部分.
给定一个模板文件page.html,一些作者w(可能是一个http.ResponseWriter)和一些包含要包含数据的字段的结构体p放在一个模板字段中,你可以这样做:
定义一个函数:
func markDowner(args ...interface{}) template.HTML { s := blackfriday.MarkdownCommon([]byte(fmt.Sprintf("%s",args...))) return template.HTML(s) }
tmpl := template.Must(template.New("page.html").Funcs(template.FuncMap{"markDown": markDowner}).ParseFiles("page.html"))
执行模板:
err := tmpl.ExecuteTemplate(w,"page.html",p) if err != nil { http.Error(w,err.Error(),http.StatusInternalServerError) }
然后,在你的模板文件中,你可以这么说:
{{.Body | markDown}}
它将通过您的markDowner函数传递Body.