2014-04-17 9 views
12

Martini çerçevesini kullanıyorum, bir markdown dosyası var ve bunu tmpl/html şablonunda HTML olarak oluşturmak istiyorum.Blackfriday ile bir golang şablonuna (html veya tmpl) işaretleme nasıl yapabilirim?

böyle markdown dosyası:

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

Ve böyle şablon dosyası: Ben blackfriday fiyat indirimlerini ayrıştırmak ve []byte türü dönmek kullanmak

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

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

sonraki adım ben fiyat indirimlerini işlemek istiyorum Bu şablona dosya yollayın ve her bloğu doğru yere yerleştirin, bu şekilde nasıl doğru bir şekilde yapabilirim? Ya da bunu daha iyi yapmak için herhangi bir yol?

cevap

19

Bunu başarmanın bir yolu, şablon işlev haritasına özel bir işlev eklemek için Funcs yöntemini kullanmaktır. Daha fazla bilgi için the template package docs'un İşlevleri bölümlerine bakın.

bir işlev tanımlayın:

verileri içeren Body bir şablon alanına konulacak bir alana sahip bir şablon dosyasını page.html, bazı yazar w (muhtemelen bir http.ResponseWriter) ve bazı yapı p göz önüne alındığında, böyle bir şey yapabilirsiniz :

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

şablon işlevi haritaya ekleyin:

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) 
} 

Ardından, şablon dosyasında, gibi bir şey koyabilirsiniz:şablonu Yürütme

{{.Body | markDown}} 

Ve bu senin markDowner işlevi aracılığıyla Body geçecek.

Playground

+1

Sadece işe yarıyor! Thx ~ – AriesDevil

İlgili konular