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

我在传递给模板的代码中有一个简单的随机整数


            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}}" 使模板崩溃,就像变量未正确传递一样。也许问题在于这是一个循环,所以我需要每篇文章的随机数才能显示照片?


有没有其他方法可以直接在模板中完成?


慕虎7371278
浏览 96回答 1
1回答

ITMISS

该{{range}}操作更改了点,因此{{.Photo}}在 的内部{{range .Pages}}将根据 的元素进行解析.Pages。用于$引用传递给模板执行的“外部”原始值:src="{{$.Photo}}"虽然这只是一个整数,但您可能希望在路径或 URL 中使用它,如下所示:src="/path/to/images?id={{$.Photo}}"注意:如果你想为所有页面使用不同的图像,你必须为每个页面传递不同的数字,而不仅仅是一个。然后在页面中添加一个Photo字段,然后你就可以在你原来的代码中的{{range}}as里面引用它了{{.Photo}}。你写了你不能修改,Page因为它来自你的数据库。如果是这样,那么要么传递一段随机数并index像这样访问它们:min := 1max := 1563Photos := make([]int, len(pages))for i := range Photos {&nbsp; &nbsp; Photos[i] = rand.Intn(max - min + 1)}tmpl.ExecuteTemplate(w, "index.html", struct {&nbsp; &nbsp; Pages&nbsp; &nbsp; &nbsp; &nbsp; []Page&nbsp; &nbsp; CurrentPage&nbsp; int&nbsp; &nbsp; TotalPage&nbsp; &nbsp; int&nbsp; &nbsp; NextPage&nbsp; &nbsp; &nbsp;int&nbsp; &nbsp; PreviousPage int&nbsp; &nbsp; LastPage&nbsp; &nbsp; &nbsp;int&nbsp; &nbsp; ShowNext&nbsp; &nbsp; &nbsp;bool&nbsp; &nbsp; ShowPrevious bool&nbsp; &nbsp; Photo&nbsp; &nbsp; &nbsp; &nbsp; []int}{&nbsp; &nbsp; Pages:&nbsp; &nbsp; &nbsp; &nbsp; pages,&nbsp; &nbsp; CurrentPage:&nbsp; pageIndex + 1,&nbsp; &nbsp; TotalPage:&nbsp; &nbsp; totalPaginationPage,&nbsp; &nbsp; NextPage:&nbsp; &nbsp; &nbsp;pageIndex + 1,&nbsp; &nbsp; PreviousPage: pageIndex - 1,&nbsp; &nbsp; LastPage:&nbsp; &nbsp; &nbsp;totalPaginationPage - 1,&nbsp; &nbsp; ShowNext:&nbsp; &nbsp; &nbsp;pageIndex+1 < totalPaginationPage,&nbsp; &nbsp; ShowPrevious: pageIndex-1 >= 0,&nbsp; &nbsp; Photo:&nbsp; &nbsp; &nbsp; &nbsp; Photos,})在模板中:{{range $idx, $page := .Pages}}&nbsp; &nbsp; <a href="{{.Slug}} "><img&nbsp; &nbsp; &nbsp; &nbsp; src="{{index $.Photos $idx}}"&nbsp; &nbsp; &nbsp; &nbsp; alt=""/>&nbsp; &nbsp; </a>{{end}}或者注册一个random可以从模板调用的函数:// Parse the template as you did, but first register a random function:min, max := 1, 1563tmpl, err := template.New("").Funcs(template.FuncMap{&nbsp; &nbsp; "random": func() int { return rand.Intn(max - min + 1) },}).ParseFiles("template-name.html")您可以像这样从模板中调用它:{{range .Pages}}&nbsp; &nbsp; <a href="{{.Slug}} "><img&nbsp; &nbsp; &nbsp; &nbsp; src="{{random}}"&nbsp; &nbsp; &nbsp; &nbsp; alt=""/>&nbsp; &nbsp; </a>{{end}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go