我有这样的结构:
type Page struct {
Content string
}
然后我读了一个降价文件并分配给一个变量:
data, err := ioutil.ReadFile("a.md")
lines = string(data)
page.Content = markdownRender([]byte(lines))
markdown文件是这样的:
##Hello World
###Holo Go
然后我把它放入markdown渲染函数并返回一个字符串值:
func markdownRender(content []byte) string {
htmlFlags := 0
htmlFlags |= blackfriday.HTML_USE_SMARTYPANTS
htmlFlags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS
renderer := blackfriday.HtmlRenderer(htmlFlags, "", "")
extensions := 0
extensions |= blackfriday.EXTENSION_NO_INTRA_EMPHASIS
extensions |= blackfriday.EXTENSION_TABLES
extensions |= blackfriday.EXTENSION_FENCED_CODE
extensions |= blackfriday.EXTENSION_AUTOLINK
extensions |= blackfriday.EXTENSION_STRIKETHROUGH
extensions |= blackfriday.EXTENSION_SPACE_HEADERS
return string(blackfriday.Markdown(content, renderer, extensions))
}
最后我在html模板中调用page.Content
并生成静态html:
{{.Content}}
但在生成的html中,它在浏览器中显示(我在chrome和safari中尝试过)就像这样(不是源代码,它只是在页面中显示):
<p>##Hello World ###Holo Go </p>
但我希望它像这样
Hello World
Holo Go
那么,我该怎么做呢?
答案 0 :(得分:3)
首先,你的降价输入不太正确 - 标题应该有空格将#
与文本分开。您可以使用blackfriday-tool验证这一点:
$ echo ##Hello | blackfriday-tool
<p>##Hello</p>
$ echo ## Hello | blackfriday-tool
<h2>Hello</h2>
其次,如果您将blackfriday
的HTML输出提供给html/template
,则会自动转义以确保安全。
如果您信任markdown输入和blackfriday的HTML输出,那么您可以通过将内容包装在html/template
HTML
值中来告诉模板系统信任该内容:
type Page struct {
Content template.HTML
}
err = t.ExecuteTemplate(w, "page", Page{Content: template.HTML(s)})
有关示例,请参阅http://play.golang.org/p/eO7KDJMlb8。