Шаблоны Golang Martini просто показывают HTML при рендеринге уценки

Я работаю над написанием простого блога на Голанге с использованием Martini, пакета Martini-Contrib Renderer и Blackfriday.

Я могу получить пост в БД и из БД без проблем. Я даже получаю тело поста из БД и в свою структуру как html, однако, когда мы визуализируем шаблон, результат будет просто текстовым html и выглядит не так, как должен.

Код размещен здесь:

http://bitbucket.org/ChasingLogic/goblog

Любая помощь будет отличной.

РЕДАКТИРОВАТЬ:

Вы можете увидеть, что он делает здесь:

http://chasinglogic.com/

1 ответ

Решение

Шаблоны Golang по умолчанию экранируют переменные. Ты можешь использовать template.HTML вместо string когда он содержит HTML и источник является доверенным (что, в данном случае, кажется).

http://golang.org/pkg/html/template/

введите строку HTML

HTML инкапсулирует известный безопасный фрагмент HTML-документа. Он не должен использоваться для HTML от сторонних производителей или HTML с закрытыми тегами или комментариями. Выводы звукового HTML-дезинфицирующего средства и шаблона, экранированного этим пакетом, хороши для использования с HTML.

Я бы исправил это, изменив это.

type Post struct {
  Title  string
  Body   string
  Author string
  Date   string
}

в

type Post struct {
  Title  string
  Body   template.HTML
  Author string
  Date   string
}

А потом поменяй

post.Body = string(blackfriday.MarkdownCommon([]byte(preFormatMarkdown)))

в

post.Body = template.HTML(blackfriday.MarkdownCommon([]byte(preFormatMarkdown)))
Другие вопросы по тегам