添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Q&A for Work

Setup a private space for you and your coworkers to ask questions and share information. Learn more about Teams

I use the Martini framework,I have some markdown file and I want render it as HTML in tmpl/html template.

The markdown file like this:

title: A Test Demo
##ABC

And the template file like this:

<title>{{name}}</title> </head> <h2>{{abc}}</h2> <blockquote> <p>{{xyz}}</p> </blockquote> </body>

I use the blackfriday parse the markdown and return []byte type,next step I wanna render the markdown file to this template and make each block to the right place,so how can I do this right way? Or use any way to do this better?

One way to achieve this is to use the Funcs method to add a custom function to the template function map. See the Functions section of the template package docs for more info.

Given a template file page.html, some writer w (probably an http.ResponseWriter), and some struct p with a field Body containing data to be put into a template field, you can do something like:

Define a function:

func markDowner(args ...interface{}) template.HTML {
    s := blackfriday.MarkdownCommon([]byte(fmt.Sprintf("%s", args...)))
    return template.HTML(s)

Add it to the template function map:

tmpl := template.Must(template.New("page.html").Funcs(template.FuncMap{"markDown": markDowner}).ParseFiles("page.html"))

Execute the template:

err := tmpl.ExecuteTemplate(w, "page.html", p)
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)

Then, in your template file, you can put something like:

{{.Body | markDown}}

And it will pass the Body through your markDowner function.

Playground

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.

site design / logo © 2019 Stack Exchange Inc; user contributions licensed under cc by-sa 3.0 with attribution required. rev 2019.7.25.34438