英文:
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: "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 code
<link rel="stylesheet" href="{{.cssUrl}}/test.css" />
答案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: "hello"
}
templates = template.Must(template.ParseGlob("templates/*.html"))
if err := templates.ExecuteTemplate(w, "sample.html", pageDefault); err != nil {
// Check error here.
}
}
And your HTML code can refer to that exported field:
<link rel="stylesheet" href="{{.CssUrl}}/test.css" />
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论