如何使用HTML和CSS设置Go错误的样式?

如何使用HTML和CSS设置Go错误的样式?,go,go-templates,Go,Go Templates,我想在我的Go Web应用程序中设置错误样式 目前,我正在处理类似以下示例的错误: if !ok { http.Error(w, "Username and/or password do not match", http.StatusForbidden) return } 但是,这会导致错误消息在浏览器中显示为简单文本。我想用HTML和CSS为我的错误设置样式,但简单地忽略http.Error方法并使用: TPL := template.Must(template.ParseG

我想在我的Go Web应用程序中设置错误样式

目前,我正在处理类似以下示例的错误:

if !ok {
    http.Error(w, "Username and/or password do not match", http.StatusForbidden)
    return
}
但是,这会导致错误消息在浏览器中显示为简单文本。我想用HTML和CSS为我的错误设置样式,但简单地忽略
http.Error
方法并使用:

TPL := template.Must(template.ParseGlob("templates/*.gohtml"))
if !ok {
    TPL.ExecuteTemplate(w, "usernamePasswordMismatch.gohtml", nil)
}

有人可以推荐一种方法来正确处理我的错误,使用
http.error
方法或类似方法,并且仍然使用HTML和CSS设置我的错误页面的样式吗?

在执行模板之前,您可以手动编写http状态代码,并返回:

TPL := template.Must(template.ParseGlob("templates/*.gohtml"))
if !ok {
    w.WriteHeader(http.StatusForbidden)
    TPL.ExecuteTemplate(w, "usernamePasswordMismatch.gohtml", nil)
}
您希望在写入实际数据之前调用
WriteHeader
,否则
ResponseWriter
将自动使用
StatusOK
作为响应:


这通常被称为“消息闪烁”。通常,您要做的是拥有一个cookie,您可以将消息推送到该cookie上(通常具有严重性,例如信息、警告、错误等)。然后使用javascript从cookie中获取消息并将其清除。例如,您可以有一个元素
,在页面加载时,您可以根据cookie将消息插入其中。更合适的方法是将消息绑定到您可以在模板中访问的请求,但cookie方法更通用。@Jesse您能在第二条评论上展开吗?如何将消息绑定到请求,以及如何在模板中访问这些消息?您能提供一些伪代码示例作为答案吗?只需将其视为普通页面;为您的邮件制作一个替换模板并忽略
http.Error()
。这种方法对不关心格式化的人来说很方便。简单模板替换->这并不能解决问题。@xgord Yes这可以解决问题。Cerise Limon在上面的评论中也写道。谢谢。我不能因为我的名声而投票。@Jesse它怎么不能回答这个问题?OP想要返回http错误状态,但同时也要呈现一个模板。@Peter啊,Cerise Limon就是这么做的。我甚至没有注意到那句话。很高兴你解决了你的问题。
// If WriteHeader has not yet been called, Write calls
// WriteHeader(http.StatusOK) before writing the data.