Golang 中国

比如从数据库中取出一组数据books,现在怎样在html模板中循环出来呢?

30 回复
jimmykuu
#1 jimmykuu • 2012-12-23 17:02

查看text/templaterange

{{range .books}}
    <h1>{{.Title}} <small>{{.Author}}</small></h1>
{{end}}
bianweiall
#2 bianweiall • 2012-12-23 17:19

多谢了!

bianweiall
#3 bianweiall • 2012-12-23 18:08

兄弟,刚刚做了下没成!

template: booklist.html:1: can't evaluate field books in type []main.Book

这个是什么意思啊?

jimmykuu
#4 jimmykuu • 2012-12-23 18:35

你Execute里是如何传递的参数?

bianweiall
#5 bianweiall • 2012-12-23 23:30
func renderTemplate2(w http.ResponseWriter, tmpl string, bs []Book) {
    err := templates[tmpl].Execute(w, bs)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

func bookListHandler(w http.ResponseWriter, r *http.Request, id string) {
    idToInt, _ := strconv.Atoi(id)
    var b Book
    books, err := b.getListBook(10, idToInt*10-10)
    if err != nil {
        fmt.Fprintf(w, "获取数据出错!!!")
        return
    }
    renderTemplate2(w, "tmpl/booklist", books)
}

是err := templates[tmpl].Execute(w, bs)这句错了,怎么改?

jimmykuu
#6 jimmykuu • 2012-12-24 10:49
{{range .}}
    you code here
{{end}}
bianweiall
#7 bianweiall • 2012-12-24 11:45

多谢!

gaicitadie
#8 gaicitadie • 2012-12-24 17:57

如果是两层嵌套的循环怎么做呢?比如

{{range .users}}
   {{range .books}}
      {{.Name}}
   {{end}}
{{end}}

里面的.Name怎么判定是user的还是book的?

descusr
#9 descusr • 2012-12-25 09:22

@gaicitadie 是book的。

qkevin123
#10 qkevin123 • 2013-08-18 00:04

把一个数组在HTML中循环显示正常。

那么map该如何做呢?我需要把map中的key和value都输出到HTML中。key和value都是动态生成的,我无法提前知道key是什么。

比如下面的定义,

  type HomePage struct {
     Pages map[string]string
  }

  {{range .Pages}}
      {{.Key}}
  {{end}}

确认map中是有内容的,not nil,无法获得结果。

在text/template中有这个说明,没有搞定,求援。

  • The name of a key of the data, which must be a map, preceded by a period, such as .Key The result is the map element value indexed by the key. Key invocations may be chained and combined with fields to any depth: .Field1.Key1.Field2.Key2 Although the key must be an alphanumeric identifier, unlike with field names they do not need to start with an upper case letter. Keys can also be evaluated on variables, including chaining: $x.key1.key2
jimmykuu
#11 jimmykuu • 2013-08-18 09:40
{{range $key, $value := .Pages}}
    {{$key}}, {{$value}}
{{end}}
qkevin123
#12 qkevin123 • 2013-08-18 21:41

great, many thanks.

122676434
#13 122676434 • 2015-04-24 11:58

{{range .books}}

{{.Title}} {{.Author}}

{{end}} 请问这个books 是怎么来的,另外如何便历list.List呢

jimmykuu
#14 jimmykuu • 2015-04-24 13:21

t.Execute(wr, map[string]interface{}{"books": books]}) ,构造一个 map 传入模板。

不知道你的 list.List 是啥意思。

122676434
#15 122676434 • 2015-04-24 13:33

就是"container/list" 包中的List 我里面放的结构体,请问题怎么遍历呢? 代码遍历是

for e := listObj.Front(); e != nil; e = e.Next() {
   if stu, ok := e.Value.(entity.StudentEnt); ok {
   }
}

不知道在模板中怎么用

jimmykuu
#16 jimmykuu • 2015-04-24 14:29

你可以代码里先处理成 slice 再到模板中用。

yue
#17 yue • 2015-04-24 14:52

借贵贴问一个问题:

revel 模板 {{range .errors}}{{.}}{{end}}

输出: err1 err2 err3

如果我只想要err1,怎么做呢?谢谢!

jimmykuu
#18 jimmykuu • 2015-04-24 15:12
{{index .errors 0}}
yue
#19 yue • 2015-04-24 15:54

谢谢,我基础真不牢呀,根据您这个找到答案了 executing "user/Signin.html" at : error calling index: int is not index type for map[string]*revel.ValidationError

=====

我这个是map error.name
error.password 这样就可以了

qingo
#20 qingo • 2015-04-27 11:05

{{range .users}} {{range .books}} {{.Name}} {{end}} {{end}}

我也同问,怎么设计2层以上嵌套循环啊?

jimmykuu
#21 jimmykuu • 2015-04-27 22:40

这样就可以,只不过你的 User 的字段 Books 不能用小写开头,否则在模板在是不可见的,将会报错。

qingo
#22 qingo • 2015-04-29 21:07

没想到这么快就回答,谢谢,反而我在外地开会,耽误了阅读,抱歉。因为是小白,所以见谅。 我的代码是这样:

  {{range .Categoryjieduan}}
  <tr>
    <th>{{.Id}}</th>
    <th>{{.Title}}</th>
    <th>{{.Views}}</th>
  </tr>
  {{end}}
             {{range .Categoryzhuanye}}
             <tr>
             <th>{{$v.Title}}</th>
             </tr>
             {{end}}

             {{range .Categorychengguo}}
             <tr>
              <th><a href="/topic/add?id={{.Id}}">{{.Title}}</a></th>
              <th><a href="/topic/add?id={{.Id}}">添加成果</a>
              <a href="/category/modify?tid={{.Id}}">修改</a>
              <a href="/category/delete?tid={{.Id}}">删除</a>
               </th>
             </tr>
             {{end}}

以上代码可以正确显示,而改成嵌套循环就不行了,如下,提示说models中没这个结构

  {{range .Categoryjieduan}}
  <tr>
    <th>{{.Id}}</th>
    <th>{{.Title}}</th>
    <th>{{.Views}}</th>
             {{range .Categoryzhuanye}}
               <th>{{.Title}}</th>
                 {{range .Categorychengguo}}
                   <th><a href="/topic/add?id={{.Id}}">{{.Title}}</a></th>
                 {{end}}
            {{end}}
  </tr> 

{{end}}

jimmykuu
#23 jimmykuu • 2015-04-29 23:57

我明白你的意思了,你这样写的话,模板会认为 CategorychengguoCategoryzhuanye 的字段,解决方法是加个 $ ,这样模板就知道去找顶层的变量了。

{{range .Categoryjieduan}}
<tr>
  <th>{{.Id}}</th>
  <th>{{.Title}}</th>
  <th>{{.Views}}</th>
    {{range $.Categoryzhuanye}}
       <th>{{.Title}}</th>
       {{range $.Categorychengguo}}
         <th><a href="/topic/add?id={{.Id}}">{{.Title}}</a></th>
       {{end}}
    {{end}}
  </tr> 
{{end}}
qingo
#24 qingo • 2015-05-01 09:49

果然是这样。非常感谢jimmykuu。

qingo
#25 qingo • 2015-05-01 10:33

再加入判断就成这样:

  {{range $k,$v :=.Categoryjieduan}}
  <tr>
    <th>{{.Id}}</th>
    <th>{{.Title}}</th>
    <th>{{.Views}}</th> 
             {{range $k1,$v1 :=$.Categoryzhuanye}}
             {{if eq $v.Id $v1.ParentId}}
                  ……
            {{end}}
lovederh
#26 lovederh • 2015-07-25 18:10

你好,请问一下,如果我想把

  {{range $k,$v :=.Categoryjieduan}}
  <tr>
    <th>{{.Id}}</th>
    <th>{{.Title}}</th>
    <th>{{.Views}}</th> 
             {{range $k1,$v1 :=$.Categoryzhuanye}}
             {{if eq $v.Id $v1.ParentId}}
                  ……
            {{end}}

这里面的

    <th>{{.Id}}</th>
    <th>{{.Title}}</th>
    <th>{{.Views}}</th>

部分做一个循环要怎么做。
类似这样

 {{range $k,$v :=.Categoryjieduan}}
  <tr>
{{range $k,$v:= .Thead}}
<th>{{$v}}</th>
{{end}}
{{end}}
kzzhr
#27 kzzhr • 2015-07-26 18:48

还是先看一遍官方文档吧。。。

litengjiao11
#28 litengjiao11 • 2016-07-07 15:12

我想问下html页面怎么把后台传来的一个list循环放到一个table里面
m.put(“list”, ls.querylol());
后台的方法是这样 然后前台怎么给他弄出来 用html

nuokesasi
#29 nuokesasi • 2016-07-08 18:03

pongo2更好用

Along
#30 Along • 2017-11-09 09:30

支持好东西

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。