Maison > développement back-end > Golang > le corps du texte

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

WBOY
Libérer: 2024-02-10 09:09:09
avant
895 Les gens l'ont consulté

在 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,
            })
Copier après la connexion

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>
Copier après la connexion

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,   
            })
Copier après la connexion

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}}
Copier après la connexion

Aussi essayé

<a href="{{.slug}} ">    <img
        
 src="/public/suisse/suisse{{index $.photos $idx}}.jpg"
               alt=""
      /></a>
Copier après la connexion

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

{{index $.Photos $idx}}
Copier après la connexion

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}}"
Copier après la connexion

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}}"
Copier après la connexion

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,
})
Copier après la connexion

Dans le modèle :

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

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")
Copier après la connexion

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

{{range .Pages}}
    <a href="{{.Slug}} "><img
        src="{{random}}"
        alt=""/>
    </a>
{{end}}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal