首頁 > 後端開發 > Golang > 主體

在 Go 模板中對照片使用隨機 Int

WBOY
發布: 2024-02-10 09:09:09
轉載
869 人瀏覽過

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

php小編子墨在Go模板中,我們經常需要對照片進行處理,而使用隨機Int可以幫助我們實現一些有趣的效果。隨機Int是一種產生隨機整數的函數,我們可以利用它在模板中對照片進行隨機化的操作,例如隨機展示不同的照片、隨機為照片添加濾鏡效果等。本文將詳細介紹如何在Go模板中使用隨機Int來處理照片,並給出一些實際應用的範例。無論你是初學者還是有一定經驗的開發者,都可以透過本文學習到一些關於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 張)

{{範圍.頁}}

<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}}" 會使範本崩潰,就像變數未正確傳遞一樣。也許問題是這是在一個循環內,所以我需要每篇文章一個隨機數字才能顯示照片?

還有其他方法可以直接在範本中執行嗎?

更新

感謝我現在得到的指導

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}}


<div id="content">
  <div class="card">
    <p>
      <div class="card-img">

  
    
        <a href="{{.slug}} ">    <img
        
 src="{{index $.photos $idx}}"
               alt=""
      /></a>
        </div>
        
        <div class="card-info">
          <div class="card-info-title">
<a href="{{.slug}} " >{{.title}} </a>
</div>

<div class="card-info-category">
  <p>

tags:
</p>
       
          <ul>
       
            <li>
  {{.tags}}
          </li>
  

</ul>
</div>


<div class="card-info-date">
{{.date}} 

</div>

</div>
</p>
</div>

</div>



       
{{end}}
登入後複製

也嘗試過

<a href="{{.slug}} ">    <img
        
 src="/public/suisse/suisse{{index $.photos $idx}}.jpg"
               alt=""
      /></a>
登入後複製

但不幸的是,一旦我調用,模板就會停止執行

{{index $.Photos $idx}}
登入後複製

我認為這是我這邊的某種打字錯誤?

解決方法

{{range}} 操作會改變點,因此{{range .pages}} 內的{ {.photo}} 將解析為.pages 的元素。

使用$來引用“外層”,傳遞給模板執行的原始值:

src="{{$.photo}}"
登入後複製

雖然這只是一個整數,但您可能想要在路徑或 url 中使用它,如下所示:

src="/path/to/images?id={{$.photo}}"
登入後複製

注意:如果您想為所有頁面使用不同的圖像,則必須為每個頁面傳遞不同的數字,而不僅僅是單個數字。然後在頁面中添加一個photo 字段,然後您可以在{{range}} 中引用它,例如原始程式碼中的{{.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}}
登入後複製

以上是在 Go 模板中對照片使用隨機 Int的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!