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
> 123
And the template file like this:
<head>
<title>{{name}}</title>
</head>
<body>
<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?
To convert Markdown to HTML using Typora, click File —> Export —> HTML. Then save the file in your preferred location. The image below shows that the HTML output looks exactly as how the Markdown is displayed inside Typora.
Markdown supports HTML, so if you need any special attributes on elements, you can just use HTML.
Go template Parse This is the data type used in the template; the fields must be exported, that is capitalized. A new template is created. We parse the template string with Parse . Using the dot operator, we access the fields that are passed to the template engine.
HTML/template is a Golang (Go) package that implements data-driven templates for generating HTML outputs that are safe against code injection. A key benefit of using HTML/template is that it produces safe, escaped HTML output using contextual auto-escaping.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With