14

我使用 Martini 框架,我有一些降价文件,我想在 tmpl/html 模板中将其呈现为 HTML。

降价文件是这样的:

title: A Test Demo
---
##ABC
> 123

和这样的模板文件:

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

<body>
  <h2>{{abc}}</h2>
  <blockquote>
    <p>{{xyz}}</p>
  </blockquote>
</body>

我使用黑色星期五解析降价和返回[]byte类型,下一步我想将降价文件渲染到这个模板并将每个块放到正确的位置,那么我该如何正确地做到这一点?或者使用任何方法来更好地做到这一点?

4

1 回答 1

25

实现此目的的一种方法是使用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)
}

将其添加到模板功能映射中:

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}}

它会Body通过你的markDowner函数。

操场

于 2014-04-17T13:00:06.737 回答