【问题标题】:HTML output is being interpreted as plain text instead of being received as htmlHTML 输出被解释为纯文本,而不是被接收为 html
【发布时间】:2014-07-31 18:10:56
【问题描述】:

我确定这只是我在做的一些愚蠢的事情,但我是 Go 新手,所以不确定这里发生了什么。我有以下基本设置。

requestHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    t := template.New("test")
    t, _ := template.ParseFiles("base.html")
    t.Execute(w, "")
})

server := &http.Server{
    Addr:           ":9999",
    Handler:        requestHandler,
    ReadTimeout:    10 * time.Second,
    WriteTimeout:   10 * time.Second,
    MaxHeaderBytes: 1 << 20,
}

log.Fatal(server.ListenAndServe())

base.html的内容如下:

<DOCTYPE html>
<html>
    <body>
        base.html
    </body>
</html>

当我运行服务器并加载页面时,我会逐字看到模板中的 HTML,而不是解释的版本。结果是,模板被包裹在 pre 标记中,随后被包裹在新文档中。

那么发生了什么?为什么默认情况下将其视为纯文本而不是将其作为 html 发送,以便浏览器可以正确呈现它?当然,这一定是一个简单的误解,但在搜索中没有得到任何东西。想法?

【问题讨论】:

    标签: html templates go plaintext


    【解决方案1】:

    您需要添加一个带有 Content-Type 的标题

     w.Header().Set("Content-Type", "text/html")
    

    【讨论】:

    • 啊,我想它可能是这样的。当然,在写任何东西之前需要设置标题,只是为了澄清。谢谢!
    • 您实际上不需要这样做(这很有帮助):Go 和/或您的浏览器会为您推断。 OP 在他的 doctype 声明中缺少 !,这就是它呈现为纯文本的原因:&lt;!DOCTYPE html&gt;
    • 好吧,现在感觉有点傻。 :-) 为什么每个臭名昭著的角色都如此重要?!不错的收获。
    猜你喜欢
    • 1970-01-01
    • 2016-06-29
    • 2013-06-21
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2019-12-26
    • 1970-01-01
    相关资源
    最近更新 更多