2017-01-19 5 views
0

나는 Golang을 사용하여 html 전자 메일을 보내려고하지만 기본 Golang html/template 패키지 대신 Pongo2을 사용하려고합니다. 이 질문에 Go - Pongo2를 사용하여 임시 바이트 버퍼에 템플릿을 렌더링하는 방법?

는 : Is it possible to create email templates with CSS in Google App Engine Go?

사용자는 내가 여기서 문제

var tmpl = pongo2.Must(pongo2.FromFile("template.html")) 
buff := new(bytes.Buffer) 
tmpl.Execute(buff, pongo2.Context{"data": "best-data"}, w) 

을하려고하고 무엇 HTML/템플릿

var tmpl = template.Must(template.ParseFiles("templates/email.html")) 

buff := new(bytes.Buffer) 
if err = tmpl.Execute(buff, struct{ Name string }{"Juliet"}); err != nil { 
    panic(err.Error()) 
} 
msg := &mail.Message{ 
    Sender: "[email protected]", 
    To:  []string{"Juliet <[email protected]>"}, 
    Subject: "See you tonight", 
    Body:  "...you put here the non-HTML part...", 
    HTMLBody: buff.String(), 
} 
c := appengine.NewContext(r) 
if err := mail.Send(c, msg); err != nil { 
    c.Errorf("Alas, my user, the email failed to sendeth: %v", err) 

를 사용하는 예를 제공하고있다 that pongo2.Execute()는 버프가 아닌 컨텍스트 데이터 만 입력 할 수 있습니다.

내 최종 목표는 Pongo2을 사용하여 내 템플릿을 작성할 수있게하고 이메일을 보내기 위해 HTML을 사용할 수 있도록 HTML을 렌더링 할 수 있습니다.

제 질문은 내가 잘못하고있는 것입니다. 내가 성취하려고하는 것이 가능한가? html을 버프에 렌더링 할 수있는 방법을 찾으면 나중에 buff.String() 부분으로 사용하여 HTML 본문에 입력 할 수 있습니다.

답변

2

대신 사용 ExecuteExecuteWriterUnbuffered :

tmpl.ExecuteWriterUnbuffered(pongo2.Context{"data": "best-data"}, &buff) 

w이 예에서 무엇을하고 있는지 확실하지. 쓸만한 또 다른 Writer 인 경우 io.MultiWriter을 사용할 수 있습니다.

// writes to w2 will go to both buff and w 
w2 := io.MultiWriter(&buff, w)