beego模板问题请教

fenglangjuxu · 2017-09-19 00:56:42 · 3248 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-09-19 00:56:42 的主题,其中的信息可能已经有所发展或是发生改变。

有两个变量userinfo(用户信息)和user_extend(用户扩展信息),其中userinfo的结构是

[]User{
    id int
    name string
}

user_extend结构是(其中map的key是User的id)

map[int]User_extend{
    coin int
    level int
}

这是要输出到前端模板的数据

    this.Data["paginator"] = paginator
    this.Data["condArr"] = condArr
    this.Data["user_info"] = userinfo
    this.Data["user_extend_info"] = user_extend

现在想实现的是,模板用range循环的时候,输出user_extend_info的level数据,也就是user_extend_info要用到user_info的{{.v.id}}

简单的说就是,一个变量要使用另一个变量的值。如果是smarty很简单,但是刚学go,所以很菜,不知道怎么搞,谢谢帮助。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3248 次点击  
加入收藏 微博
6 回复  |  直到 2017-09-19 03:02:52
polaris
polaris · #1 · 8年之前

试试这样

{{range .user_info}}
    {{index $.user_extend .id "level"}}
{{end}}
fenglangjuxu
fenglangjuxu · #2 · 8年之前

谢谢解答。 这样不行 {{index $.user_extend .Id "level"}} 但是这样{{index $.user_extend .Id}} 会输出{9 10000 2 0 10000} 所以感觉离成功很近了。

polaris
polaris · #3 · 8年之前

没注意到 User_Extend 是结构,改为:

{{range .user_info}}
    {{index $.user_extend .Id .Level}}
{{end}}
fenglangjuxu
fenglangjuxu · #4 · 8年之前

谢谢。but 这个Level不是user_info的,是user_extend的,你这样.Level 访问的还是user_info的吧。

polaris
polaris · #5 · 8年之前

这样子就对了:

{{range .user_info}}
    {{(index $.user_extend .Id).Level}}
{{end}}

建议以后提问,给出可以直接运行的,否则只能靠意想,比较容易出错,比如我根据你的描述,构造了下面的程序,可以直接运行:

package main

import (
    "os"
    "log"
    "text/template"
)

func main() {
    const letter = `
    {{range .user_info}}
        {{(index $.user_extend .Id).Level}}
    {{end}}
    `

    type User struct {
        Id   int
        Name string
    }
    var users = []*User{
        {1, "polaris"},
        {2, "studygolang"},
    }

    type UserExtend struct {
        Coin  int
        Level int
    }
    var userExtends = map[int]*UserExtend{
        1: {
            Coin:  2,
            Level: 1,
        },
        2: {
            Coin:  3,
            Level: 5,
        },
    }

    t := template.Must(template.New("letter").Parse(letter))

    err := t.Execute(os.Stdout, map[string]interface{}{
        "user_info":   users,
        "user_extend": userExtends,
    })
    if err != nil {
        log.Println("executing template:", err)
    }
}
fenglangjuxu
fenglangjuxu · #6 · 8年之前

这回是对了。非常感谢啊? 是我提问描述的不够清楚,主要是对go不了解,然后都不知道怎么清楚的描述。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传