2014-04-17 11 views
12

Korzystam z frameworka Martini, mam trochę pliku obniżki i chcę renderować go jako HTML w szablonie tmpl/html.Jak mogę renderować przecenę do szablonu golang (html lub tmpl) za pomocą blackfriday?

Plik Przecena tak:

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

i plik szablonu tak:

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

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

używam Czarny piątek analizowania przecen i powrócić []byte typ, następny krok chcę uczynić przecen plik do tego szablonu i uczynić każdy blok we właściwym miejscu, więc jak mogę to zrobić w odpowiedni sposób? Lub użyć dowolnego sposobu, aby to zrobić lepiej?

Odpowiedz

19

Jednym ze sposobów osiągnięcia tego jest użycie metody Funcs w celu dodania niestandardowej funkcji do mapy funkcji szablonu. Aby uzyskać więcej informacji, zobacz sekcję Funkcje z the template package docs.

Biorąc plik szablonu page.html, jakiś pisarz w (prawdopodobnie http.ResponseWriter) i trochę struct p z polem Body zawierające dane należy umieścić w polu szablonu, można zrobić coś takiego:

zdefiniować funkcję :

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

Dodaj go do mapy funkcji szablonu:

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

Wykonanie szablonu:

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

Następnie w pliku szablonu, można umieścić coś takiego:

{{.Body | markDown}} 

I będzie zdać Body pośrednictwem funkcji markDowner.

Playground

+1

To po prostu działa! Thx ~ – AriesDevil

Powiązane problemy