Maison >développement back-end >Golang >Utilisation d'un Int aléatoire pour les photos dans le modèle Go

Utilisation d'un Int aléatoire pour les photos dans le modèle Go

WBOY
WBOYavant
2024-02-10 09:09:09898parcourir

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

Modèles Zimo In Go de l'éditeur php, nous avons souvent besoin de traiter des photos, et l'utilisation de random Int peut nous aider à obtenir des effets intéressants. Random Int est une fonction qui génère des entiers aléatoires. Nous pouvons l'utiliser pour effectuer des opérations aléatoires sur des photos dans des modèles, telles que l'affichage aléatoire de différentes photos, l'ajout aléatoire d'effets de filtre aux photos, etc. Cet article détaillera comment utiliser des modèles Ints in Go aléatoires pour traiter des photos et donnera quelques exemples d'applications pratiques. Que vous soyez débutant ou développeur expérimenté, vous pouvez apprendre quelques conseils pratiques sur les modèles Go et les Ints aléatoires dans cet article.

Contenu de la question

J'ai un simple entier aléatoire dans mon code que je passe à un modèle

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

L'idée est de randomiser une photo dans mon modèle (j'en ai 1563 dans mon dossier)

{{range.page}}

<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}}" fera planter le modèle comme si la variable n'avait pas été transmise correctement. Peut-être que le problème est que c'est dans une boucle, j'ai donc besoin d'un nombre aléatoire par message pour afficher les photos ?

Existe-t-il un autre moyen de le faire directement dans le modèle ?

Mise à jour

Merci pour les conseils que je reçois maintenant

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

Dans le modèle

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

Aussi essayé

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

Mais malheureusement, une fois que j'appelle, le modèle cesse de s'exécuter

{{index $.Photos $idx}}

Je pense que c'est une sorte de faute de frappe de ma part ?

Solution

{{range}} 操作会更改点,因此 {{range .pages}} 内的 {{.photo}} 将解析为 .pages éléments.

Utilisez $ pour faire référence à la valeur brute "externe" transmise à l'exécution du modèle :

src="{{$.photo}}"

Bien qu'il ne s'agisse que d'un nombre entier, vous souhaiterez peut-être l'utiliser dans un chemin ou une URL comme celui-ci :

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

Remarque : Si vous souhaitez utiliser des images différentes pour toutes les pages, vous devez transmettre un numéro différent pour chaque page, pas seulement un numéro unique. Ajoutez ensuite un photo 字段,然后您可以在 {{range}} 中引用它,如原始代码中的 {{.photo}} à la page.

Vous avez écrit que vous ne pouvez pas modifier page,因为它来自您的数据库。如果是这样,则传递一段随机数并使用 indexy accéder comme suit :

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

Dans le modèle :

{{range $idx, $page := .pages}}
    <a href="{{.slug}} "><img
        src="{{index $.photos $idx}}"
        alt=""/>
    </a>
{{end}}

Ou enregistrez une random fonction que vous pouvez appeler à partir du modèle :

// 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")

Vous pouvez l'appeler à partir d'un modèle comme celui-ci :

{{range .Pages}}
    <a href="{{.Slug}} "><img
        src="{{random}}"
        alt=""/>
    </a>
{{end}}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer