Home >Backend Development >Golang >Using random Int for photos in Go template
php Editor Zimo In Go templates, we often need to process photos, and using random Int can help us achieve some interesting effects. Random Int is a function that generates random integers. We can use it to perform random operations on photos in templates, such as randomly displaying different photos, randomly adding filter effects to photos, etc. This article will detail how to use random Ints in Go templates to process photos, and give some examples of practical applications. Whether you are a beginner or an experienced developer, you can learn some practical tips about Go templates and random Ints from this article.
I have a simple random integer in my code that I pass to the template
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, })
The idea is to randomize a photo in my template (I have 1563 in my folder)
{{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}}" will crash the template as if the variable was not passed correctly. Maybe the problem is that this is within a loop, so I need a random number per post to display the photos?
Is there any other method that can be executed directly in the template?
renew
Thanks for the guidance I have now
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, })
In template
{{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}}
Also tried
<a href="{{.slug}} "> <img src="/public/suisse/suisse{{index $.photos $idx}}.jpg" alt="" /></a>
But unfortunately, the template stops executing once I call it
{{index $.Photos $idx}}
I think this is some kind of typo on my end?
{{range}}
The operation changes the points, so {{range .pages}}
within {.photo}} will resolve to the element
.pages.
$ to refer to the "outer layer", the original value passed to the template execution:
src="{{$.photo}}"Although this is just an integer, you may want to use it in a path or url, like this:
src="/path/to/images?id={{$.photo}}"Note: If you want to use different images for all pages, you must pass a different number for each page, not just a single number. Then add a
photo field to the page and then you can reference it in
{{range}} like
{{.photo}}## in the original code # .
You wrote that you cannot modify
because it comes from your database. If so, pass a range of random numbers and access them using index
like this:
<pre class="brush:php;toolbar:false;">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,
})</pre>
In template:
{{range $idx, $page := .pages}} <a href="{{.slug}} "><img src="{{index $.photos $idx}}" alt=""/> </a> {{end}}
Or register a
random function that you can call from the template:
<pre class="brush:php;toolbar:false;">// 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")</pre>
You can call it from a template like this:
{{range .Pages}} <a href="{{.Slug}} "><img src="{{random}}" alt=""/> </a> {{end}}
The above is the detailed content of Using random Int for photos in Go template. For more information, please follow other related articles on the PHP Chinese website!