1. 首页
  2. 主题
  3. Go问与答

求助! 关于WEB分页

hellsam · · 2398 次点击
~~~ 求助 下面的代码是基于 数据输出渲染到HTML的 现在就是这个分页不太理解 在论坛找到个帖子分页的 不知道如何合并下面代码 测试了好久没有搞定 希望好心人能帮忙下 万分安歇 https://studygolang.com/articles/5689 ~~~ main.go ~~~ package main import ( "net/http" "database/sql" _ "github.com/go-sql-driver/mysql" // 包与你的不一样 "log" "html/template" ) func main() { http.HandleFunc("/", table) http.ListenAndServe(":8080", nil) } // 定义查询的数据结构体 type User struct { Id int64 Name string Age int Addr string } // table // 展示列表 func table(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() // 连接数据库 db, err := sql.Open("mysql", "root:root@/test?charset=utf8") if err != nil { log.Fatal(err) return } // 查询所有内容 sql := "SELECT id, name, age, addr FROM test" rows, err := db.Query(sql) if err != nil { log.Fatal(err) return } // 切片数据 data := make([]*User, 0) for rows.Next() { // 创建一个结构体 类似model user := &User{} // 将数据分别扫描进去 if err := rows.Scan(&user.Id, &user.Name, &user.Age, &user.Addr); err != nil { log.Fatal(err) return } // fmt.Println(user) // 将结果插入切片中 data = append(data, user) } //fmt.Println(data) // 传递到模板中 // 如果确认自己的路径正确的前提下,出现没有找到指定的模板文件的时候 // 记得在命令行执行 go run main.go tpl, err := template.ParseFiles("view/index.html") if err != nil { log.Fatal(err) return } tpl.Execute(w, data) } ~~~ index.html ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Table</title> <!-- 引入bootstrap --> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"> <style> .main { margin: 50px 0; } .table { border: 1px solid #e8e8e8; } </style> </head> <body> <div class="row main"> <div class="col-sm-offset-3 col-sm-6"> <table class="table"> <thead> <tr> <th>序号</th> <th>ID</th> <th>名称</th> <th>年龄</th> <th>地址</th> </tr> </thead> <tbody> <!-- 遍历 这个.就代表了那个data --> {{range $k, $v := .}} <tr> <!-- 这里的k 还有点瑕疵 + 1失败了 --> <th scope="row">{{$k}}</th> <td>{{$v.Id}}</td> <td>{{$v.Name}}</td> <td>{{$v.Age}}</td> <td>@{{$v.Addr}}</td> </tr> {{end}} </tbody> </table> </div> </div> </body> </html> ~~~ SQL ~~~ CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `age` tinyint(3) unsigned NOT NULL, `addr` varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 INSERT INTO `test` (`id`, `name`, `age`, `addr`) VALUES (1, '张三', 22, '北京市朝阳区'), (2, '李四', 25, '天津市滨海新区'); ~~~
<a href="/user/candy4dmu" title="@candy4dmu">@candy4dmu</a> ~~~ 前端HTML已经有了 https://studygolang.com/articles/5689 而html table我输出了 在本帖子中 输出没什么问题了, 现在就是 在本帖子中加条分页HTML即可了 就是我不会合并进去 因为tpl.Execute(w, data)的值是数据库的数据值, 我传了 就没办法传map了 所以 我只能想到将map集合到data里 这样在进行遍历data ~~~ HTML的 ~~~ &lt;div class=&#34;am-cf&#34;&gt; 共{{.totals}}条记录 共记{{.paginator.totalpages}} 页 当前页 {{.paginator.currpage}} &lt;div class=&#34;am-fr&#34;&gt; &lt;ul class=&#34;am-pagination&#34;&gt; &lt;li class=&#34;&#34;&gt;&lt;a href=&#34;/clubadmin/topics/{{.paginator.firstpage}}&#34;&gt;«&lt;/a&gt;&lt;/li&gt; {{range $index,$page := .paginator.pages}} &lt;li {{if eq $.paginator.currpage $page }}class=&#34;am-active&#34;{{end}}&gt;&lt;a href=&#34;/clubadmin/topics/{{$page}}&#34;&gt;{{$page}}&lt;/a&gt;&lt;/li&gt; {{end}} &lt;li&gt;&lt;a href=&#34;/clubadmin/topics/{{.paginator.lastpage}}&#34;&gt;»&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt; ~~~
#9
更多评论
你在查DB的时候加上 offset 和 limit 参数。 然后前端给你传 page , page就是你的 offset, limit 可以自己决定展示多少个。
#1
<a href="/user/momaek" title="@momaek">@momaek</a> ~~~ 上面代码返回出去的是 // 切片数据 data := make([]*User, 0) 但是下面帖子 https://studygolang.com/articles/5689 返回的是MAP 这里我纳闷 不懂如何一起丢出去到HTML 希望帮帮忙 帮改改,,我测试一天了, 实在搞不定才上论坛求助的 ~~~
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中