为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 模板中对照片使用随机 Int

在 Go 模板中对照片使用随机 Int

Go
慕虎7371278 2023-03-21 10:35:06
我在传递给模板的代码中有一个简单的随机整数            min := 1            max := 1563            Photo := rand.Intn(max - min + 1)            fmt.Println(Photo)            tmpl.ExecuteTemplate(w, "index.html", struct {                Pages        []Page                CurrentPage  int                TotalPage    int                NextPage     int                PreviousPage int                LastPage     int                ShowNext     bool                ShowPrevious bool                Photo        int            }{                Pages:        pages,                CurrentPage:  pageIndex + 1,                TotalPage:    totalPaginationPage,                NextPage:     pageIndex + 1,                PreviousPage: pageIndex - 1,                LastPage:     totalPaginationPage - 1,                ShowNext:     pageIndex+1 < totalPaginationPage,                ShowPrevious: pageIndex-1 >= 0,                Photo:        Photo,            })我的想法是随机化一张照片(文件夹中有 1563 张)所以在我的模板中{{范围.Pages}}<div id="content">  <div class="card">    <p>      <div class="card-img">              <a href="{{.Slug}} ">    <img                src="{{.Photo}}"        alt=""      /></a>        </div>                <div class="card-info">          <div class="card-info-title"><a href="{{.Slug}} " >{{.Title}} </a></div>src="{{.Photo}}" 使模板崩溃,就像变量未正确传递一样。也许问题在于这是一个循环,所以我需要每篇文章的随机数才能显示照片?有没有其他方法可以直接在模板中完成?
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

该{{range}}操作更改了点,因此{{.Photo}}在 的内部{{range .Pages}}将根据 的元素进行解析.Pages。


用于$引用传递给模板执行的“外部”原始值:


src="{{$.Photo}}"

虽然这只是一个整数,但您可能希望在路径或 URL 中使用它,如下所示:


src="/path/to/images?id={{$.Photo}}"

注意:如果你想为所有页面使用不同的图像,你必须为每个页面传递不同的数字,而不仅仅是一个。然后在页面中添加一个Photo字段,然后你就可以在你原来的代码中的{{range}}as里面引用它了{{.Photo}}。


你写了你不能修改,Page因为它来自你的数据库。如果是这样,那么要么传递一段随机数并index像这样访问它们:


min := 1

max := 1563

Photos := make([]int, len(pages))

for i := range Photos {

    Photos[i] = rand.Intn(max - min + 1)

}


tmpl.ExecuteTemplate(w, "index.html", struct {

    Pages        []Page

    CurrentPage  int

    TotalPage    int

    NextPage     int

    PreviousPage int

    LastPage     int

    ShowNext     bool

    ShowPrevious bool

    Photo        []int

}{


    Pages:        pages,

    CurrentPage:  pageIndex + 1,

    TotalPage:    totalPaginationPage,

    NextPage:     pageIndex + 1,

    PreviousPage: pageIndex - 1,

    LastPage:     totalPaginationPage - 1,

    ShowNext:     pageIndex+1 < totalPaginationPage,

    ShowPrevious: pageIndex-1 >= 0,

    Photo:        Photos,

})

在模板中:


{{range $idx, $page := .Pages}}

    <a href="{{.Slug}} "><img

        src="{{index $.Photos $idx}}"

        alt=""/>

    </a>

{{end}}

或者注册一个random可以从模板调用的函数:


// Parse the template as you did, but first register a random function:

min, max := 1, 1563

tmpl, err := template.New("").Funcs(template.FuncMap{

    "random": func() int { return rand.Intn(max - min + 1) },

}).ParseFiles("template-name.html")

您可以像这样从模板中调用它:


{{range .Pages}}

    <a href="{{.Slug}} "><img

        src="{{random}}"

        alt=""/>

    </a>

{{end}}


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信