You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言html/template渲染模板返回纯文本而非正常HTML页面问题

Go Web模板渲染返回纯文本问题解决方案

第一步:排查模板文件内容有效性

  • 确认base.html和other.html中所有HTML标签为原生写法(比如<html>、"title"),而非转义后的&lt;html&gt;、&quot;这类转义字符,存在转义字符直接替换为原生符号即可。
  • 删除模板文件开头的// Content of base.html:这类非HTML注释内容,//不是HTML合法注释语法,会被直接作为普通文本输出到响应中。

第二步:修正模板执行逻辑

你当前代码调用的是templatesHtml.ExecuteTemplate(w, "other.html", nil),但Go模板中所有{{define}}声明的命名模板为全局共享,other.html中定义的head、body模板会被全局注册,直接执行base模板即可完成页面组装,修改test函数代码如下:

func test(w http.ResponseWriter, r *http.Request) {
    // 显式声明响应内容为HTML,避免浏览器错误识别为纯文本
    w.Header().Set("Content-Type", "text/html; charset=utf-8")
    // 执行base模板而非other.html
    err = templatesHtml.ExecuteTemplate(w, "base", nil)
    if err != nil {
        log.Fatalln(err)
    }
}

如果需要保留执行other.html的写法,调整other.html内容顺序,把所有define语句放在模板最前面,避免调用base模板时head、body还未注册:

{{define "head"}}<title>other</title>{{end}}
{{define "body"}}other{{end}}
{{template "base" .}}

第三步:验证模板加载(可选)

如果修改后仍有问题,可在init函数中打印所有已加载的模板名,确认base、head、body等模板都被正确注册:

func init() {
    fmt.Println("Starting up.")
    templatesHtml = htmlTempl.Must(htmlTempl.ParseGlob("templates/*.html"))
    // 打印所有已注册的模板名
    for _, t := range templatesHtml.Templates() {
        fmt.Println("Loaded template:", t.Name())
    }
}

内容的提问来源于stack exchange,提问作者Hasan A Yousef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:27:03