Ответ 1
Один из способов добиться этого - использовать метод Funcs, чтобы добавить пользовательскую функцию к карте функций шаблона. Подробнее см. В разделе "Функции" документы пакета шаблонов.
Учитывая шаблонный файл page.html
, некоторый писатель w
(возможно, http.ResponseWriter
) и некоторая struct 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
.