加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

模板 – 在html模板golang中访问许多结构体的切片中的结构变量

发布时间:2020-12-14 19:39:04 所属栏目:资源 来源:网络整理
导读:我试图将一个包含很多结构的切片发送到html模板. 我有一个’post’结构 type Post struct { threadID int subject string name string text string date_posted string} 我创建一个类型Post(posts:= [] Post {}) 然后使用我的数据库中的行填充此切片,然后在
我试图将一个包含很多结构的切片发送到html模板.

我有一个’post’结构

type Post struct {
  threadID int
  subject string
  name string
  text string
  date_posted string
}

我创建一个类型Post(posts:= [] Post {})

然后使用我的数据库中的行填充此切片,然后在我的模板上执行.

defer latest_threads.Close()
for latest_threads.Next(){
    var threadID int
    var subject string
    var name string
    var text string
    var date_posted string
    latest_threads.Scan(&threadID,&subject,&name,&text,&date_posted) 
    post := Post{
        threadID,subject,name,text,date_posted,}
    posts = append(posts,post)
}
t,error := template.ParseFiles("thread.html")
if error != nil{
    log.Fatal(error)
}
t.Execute(w,posts)
}

程序编译/运行不错,但从模板查看html输出时

{{.}}
{{range .}}
    <div>{{.threadID}}</div>
    <h3>{{.subject}}</h3>
    <h3>{{.name}}</h3>
    <div>{{.date_posted}}</div>
    <div><p>{{.text}}</p></div>
    <br /><br />
{{end}}

{{.}}输出只要达到第{{.threadID}}在{{range}}}的html停止.

<!DOCTYPE html>
<html>
<head>
    <title> Test </title>
</head>
<body>
    //here is where {{.}} appears just fine,removed for formatting/space saving
    <div>

解决方法

这不是真的直观,但是模板(和JSON等编码包)无法访问未声明的数据成员,因此您必须以某种方式导出它们:

选项1

// directly export fields
type Post struct {
    ThreadID int
    Subject,Name,Text,DatePosted string
}

选项2

// expose fields via accessors:
type Post struct {
    threadID int
    subject,date_posted string
}

func (p *Post) ThreadID()   int    { return p.threadID    }
func (p *Post) Subject()    string { return p.subject     }
func (p *Post) Name()       string { return p.name        }
func (p *Post) Text()       string { return p.text        }
func (p *Post) DatePosted() string { return p.date_posted }

更新模板

(此部分是强制性的,无论您从上方选择了哪个选项)

{{.}}
{{range .}}
    <div>{{.ThreadID}}</div>
    <h3>{{.Subject}}</h3>
    <h3>{{.Name}}</h3>
    <div>{{.DatePosted}}</div>
    <div><p>{{.Text}}</p></div>
    <br /><br />
{{end}}

这应该工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读