又隔了几天没有写博文了。这次就记录一下在GO的Web应用中,页面显示数据吧。
首先,写GO Web的页面和普通html不同的就是本地资源的src。
<link rel="stylesheet" type="text/css" href="../static/styleheets/bootstrap.css">
平常写静态html这样写的意思是使用上一级目录下的static/styleheets/bootstrap.css文件。但是在GO中要稍微处理一下。
http.Handle("/styleheets/", http.FileServer(http.Dir("static")))
然后在页面中的css引用改为
<link rel="stylesheet" type="text/css" href="/styleheets/bootstrap.css">
上图是我项目目录的结构。
javascript也是差不多,这里就不做记录了。
接下来就是页面如何动态显示后台传来的数据。
这里我提供两种方法。
第一种:使用GO的模板
首先导入模板的包。
import "html/template"
后台传数据的写法如下
titles := []string{"title1","title2"}
t, _ := template.ParseFiles("views/tasks.gtpl")
t.Execute(w,titles)
页面中要遍历titles的话写法如下
{{range .}}
<dd><a href="#" >{{.}}</a></dd>
{{end}}
具体可以参考https://github.com/astaxie/build-web-application-with-golang/blob/master/ebook/07.4.md。
至于怎样传递多个值到页面呢。。。这个我没有试过,如果试过的话会更新一下的。
里面其实说的挺清楚的了。这里再补充三点。
1、可以导入os包(import "os"),t.Execute(w,titles)改为t.Execute(os.Stdout,titles)来调试,这样可以把原本应该输出到浏览器的输出到控制台,这样可以查看原本应该输出到浏览器的信息到底有没有错(因为如果模板解析错了,导致缺少了一些信息,例如<body>{{.Title}}</body>,由于{{.Title}}解析错误,所以输出的只有<body>,但是到达浏览器的时候它会帮你补全,这样你就不知道是哪里问题了)。
2、 注意在有些明明需要首字母大写的,这个参考上面的链接。
3、 这点一定要注意啊。。。我就因为这个被坑了一个下午。。。。{{.}}这个东东是不认<!-- -->这个注释符的啊。我在写tasks.gtpl的时候把{{.Title}}用<!-- -->,没想到在模板那里解析的时候还是会解析它,搞到解析错误。。。。。
第二种:使用js
这个我不多说,不懂的就看w3cschool看jq吧。(主要是因为我不熟悉这个,不懂讲。。。)
有缘再见