我已经遵循本教程:
http://golang.org/doc/articles/wiki/final.go,并稍微修改了我的需要/想要的.问题是我想在模板中支持HTML.我意识到这是一个安全隐患,但现在不是一个问题.
页面渲染的结果:
<h1>this<strong>is</strong>a test</h1>
让我解释一下代码:
type Page struct { Title string Body []byte }
我想要HTML的数据存储在Page.Body中.这是类型[]字节,这意味着我不能(或可以?)运行html / template.HTML(Page.Body),因为该函数需要一个字符串.
我有这样的预渲染模板:
var ( templates = template.Must(template.ParseFiles("tmpl/edit.html","tmpl/view.html")) )
实际的ExecuteTemplate如下所示:
err := templates.ExecuteTemplate(w,tmpl+".html",p)
其中w为w http.ResponseWriter,tmpl为tmpl字符串,p为p * Page
最后我的’view.html'(模板)看起来像下面这样:
<h1>{{.Title}}</h1> <p>[<a href="/edit/{{.Title}}">edit</a>]</p> <div>{{printf "%s" .Body}}</div>
我试过的事情
> {{printf“%s”.Body | html}}没有做任何事情
>我已经包括github.com/russross/blackfriday(Markdown处理器),并且已经运行p.Body = blackfriday.MarkdownCommon(p.Body),它正确地将Markdown转换为HTML,但是HTML仍然作为实体输出.
>编辑:我尝试了以下代码(我不知道为什么格式被搞砸了),它仍然输出完全一样的.
var的template.HTML
s = template.HTML(p.Body)
p.Body = [] byte
任何指导都不胜感激.如果我感到困惑,请问我可以修改我的问题.