Сохранение HTML-шаблона в виде текстового поля в БД с использованием golang
Я новичок в го и эхо. Мне необходимо сохранить HTML-шаблон (шаблон электронной почты), который также будет содержать некоторые детали в качестве контекста. Так что это может быть сохранено в столбце тела (текст в MySQL) и будет запущено позже.
if user.Email !=""{
visitingDetails := H{"user_name" : user.Fname,
"location" : location.Name,
"visitor_company": visitor.Company,
"visitor_name" : visitor.Fname +" "+visitor.Lname,
"visitor_phone" : visitor.Phone,
"visitor_email" : visitor.Email,
"visitor_fname" : visitor.Fname,
"visitor_image" : visitor.ProfilePicture,
}
subject := visitor.Fname +" has come to visit you at the reception"
body := c.Render(http.StatusOK,"email/user_notify_email.html",visitingDetails)
emailJob := models.EmailJob{Recipients: visitor.Email , Subject: subject, Body: body}
db.Create(&emailJob)
if db.NewRecord(emailJob){
fmt.Println("Unable to send email")
}
}
EmailJob
type EmailJob struct {
Id int
Recipients string
Subject string
Body string
Sent int
Error string
}
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
return t.templates.ExecuteTemplate(w, name, data)
}
body: = c.Render (http.StatusOK, "email / user_notify_email.html", visitDetails)
эта строка выдает ошибку, так как возвращает ошибку для рендера. Я не уверен, как я это сделаю? Надеюсь, я дал понять. Небольшая помощь будет высоко ценится.
2 ответа
Ты используешь context.Render
метод неверно.
https://github.com/labstack/echo/blob/master/context.go#L111
// Render renders a template with data and sends a text/html response with status
// code. Renderer must be registered using `Echo.Renderer`.
Render(code int, name string, data interface{}) error
Методы Render визуализируют шаблон и отправляют его как ответ. Этот метод возвращает значение ошибки, если происходит что-то непредвиденное, это значение ошибки является его описанием. В противном случае оно равно nil
, Смотрите: https://golang.org/pkg/errors/
Чтобы использовать Renderer, вы должны зарегистрировать его, и вы можете использовать этот зарегистрированный Renderer, чтобы получить отрендеренный текст шаблона и сохранить его в БД.
Вы можете увидеть пример рендерера в модульных тестах платформы Echo: https://github.com/labstack/echo/blob/master/context_test.go#L23
Надеюсь это поможет.
После нескольких вещей и понимания шаблона в golang. Я пришел к такому решению.
t, err := template.ParseFiles("templates/email/user_notify_email.html")
if err != nil {
fmt.Println("Error happend")
fmt.Println(err)
return c.JSON(http.StatusOK, data)
}
buf := new(bytes.Buffer)
if err = t.Execute(buf, visitingDetails); err != nil {
fmt.Println(err)
}
body := buf.String()
И теперь это тело можно хранить. Кузов предоставил шаблон, который мне нужен. Большая заслуга в этой статье https://medium.com/@dhanushgopinath/sending-html-emails-using-templates-in-golang-9e953ca32f3d