尝试从main.go传递数据到html时出现问题。

huangapple go评论65阅读模式
英文:

Issue while trying to pass data from main.go to html

问题

关于

我正在尝试将数据从main.go文件传递到HTML,并在样式表路径中打印出来...但由于某些原因,页面显示为空白。

main.go代码

var templates *template.Template
var pageDefault pageDefaults

type pageDefaults struct {
    cssUrl string
}

func loginHandler(w http.ResponseWriter, r *http.Request) {
    pageDefault = pageDefaults{
        cssUrl: "hello",
    }
    templates = template.Must(template.ParseGlob("templates/*.html"))
    templates.ExecuteTemplate(w, "sample.html", pageDefault)
}

func handler(w http.ResponseWriter, r *http.Request) {
    switch strings.ToLower(r.URL.Path) {
    case "/login":
        loginHandler(w, r)
    }
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

HTML代码

<link rel="stylesheet" href="{{.cssUrl}}/test.css" />
英文:

About

I am trying to pass data from main.go file to html and printing in stylesheet path...but due to some reasons it show blank page.

main.go code

var templates *template.Template
var pageDefault pageDefaults

type pageDefaults struct {
	cssUrl string
}

func loginHandler(w http.ResponseWriter, r *http.Request) {
	pageDefault = pageDefaults{
		cssUrl: &quot;hello&quot;
	}
	templates = template.Must(template.ParseGlob(&quot;templates/*.html&quot;))
	templates.ExecuteTemplate(w, &quot;sample.html&quot;, pageDefault)
}

func handler(w http.ResponseWriter, r *http.Request) {
	switch strings.ToLower(r.URL.Path) {
	case &quot;/login&quot;:
		loginHandler(w, r)
	}
}

func main() {
	http.HandleFunc(&quot;/&quot;, handler)
	http.ListenAndServe(&quot;:8080&quot;, nil)
}

html code

&lt;link rel=&quot;stylesheet&quot; href=&quot;{{.cssUrl}}/test.css&quot; /&gt;

答案1

得分: 1

根据"Go模板中的结构变量名"所述,Go模板引擎使用反射来获取它不了解的类型的值。

这意味着你的pageDefaults结构体应该使用一个公开的类型名PageDefaults,而不是cssUrl字段。
正如注意到的那样,你应该检查ExecuteTemplate()返回的错误:

type PageDefaults struct {
    CssUrl string
}

func loginHandler(w http.ResponseWriter, r *http.Request) {
    pageDefault = PageDefaults{
        CssUrl: "hello",
    }
    templates = template.Must(template.ParseGlob("templates/*.html"))
    if err := templates.ExecuteTemplate(w, "sample.html", pageDefault); err != nil {
        // 在这里检查错误。
    }
}

你的HTML代码可以引用该公开的字段:

<link rel="stylesheet" href="{{.CssUrl}}/test.css" />
英文:

As stated in "Struct Variable Names in Go Templates", the Go templating engine uses reflection to get the values out of types it does not "know" about.

That means your pageDefaults struct should use an exported type name PageDefaults, and field CssUrl, not cssUrl.
As noted, you should check the error from ExecuteTemplate():

type PageDefaults struct {
    CssUrl string
}

func loginHandler(w http.ResponseWriter, r *http.Request) {
    pageDefault = PageDefaults{
        CssUrl: &quot;hello&quot;
    }
    templates = template.Must(template.ParseGlob(&quot;templates/*.html&quot;))
    if err := templates.ExecuteTemplate(w, &quot;sample.html&quot;, pageDefault); err != nil {
        // Check error here.
    }
}

And your HTML code can refer to that exported field:

&lt;link rel=&quot;stylesheet&quot; href=&quot;{{.CssUrl}}/test.css&quot; /&gt;

huangapple
  • 本文由 发表于 2023年7月15日 06:56:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/76691504.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定