2014-04-17 2 views
12

저는 마티니 프레임 워크를 사용하고 있습니다. 필자는 markdown 파일을 가지고 있는데, tmpl/html 템플릿에서 HTML로 렌더링하고 싶습니다.blackfriday를 사용하여 golang 템플릿 (html 또는 tmpl)에 마크 다운을 렌더링하려면 어떻게해야합니까?

과 같이 인하 파일 :

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

그리고이 같은 템플릿 파일 : 나는 블랙 프라이데이가 가격 인하를 분석하고 []byte 형식을 반환 사용

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

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

는, 다음 단계는 I는 가격 인하를 렌더링 싶어 파일을이 템플릿에 추가하고 각 블록을 올바른 위치에 만들어야합니다. 어떻게하면 올바르게 할 수 있습니까? 또는이 방법을 더 잘 사용합니까?

답변

19

이 방법을 사용하는 방법 중 하나는 Funcs 메서드를 사용하여 사용자 지정 함수를 템플릿 함수 맵에 추가하는 것입니다. 자세한 내용은 기능 섹션 (the template package docs)을 참조하십시오.

함수를 정의합니다

이 데이터를 포함 Body 템플릿 필드에 투입 할 수있는 필드 템플릿 파일 page.html, 일부 작가 w (아마 http.ResponseWriter), 일부 구조체 p을 감안할에게, 당신이 뭔가를 할 수 있습니다 :

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

템플릿 기능지도에 추가

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

그런 다음 템플릿 파일에, 당신은 같은 것을 넣을 수 있습니다 :템플릿을 실행

{{.Body | markDown}} 

을 그리고 그것은 당신의 markDowner 기능을 통해 Body을 전달합니다.

Playground

+1

그냥 작동합니다. Thx ~ – AriesDevil