{{range where .Site.RegularPages "Section" "books"}}
{{if not (in .URL "amazon")}} --> true
{{.Title}}
{{end}}
{{end}}
However, if I do the following as I don’t want to hardcode “amazon”, the logic stops working.
{{range where .Site.RegularPages "Section" "books"}}
{{if not (in .URL .File)}} --> false. should be true
{{.Title}}
{{end}}
{{end}}
{{.File}} = amazon
{{.URL}} = /books/amazon/
Another attempt:
{{range where .Site.RegularPages "Section" "books"}}
{{if eq (urlize (delimit .Keywords "")) "amazon"}}true{{else}}false{{end}} --> this give true
{{if not (in .URL (urlize (delimit .Keywords "")))}} --> this gives false, should be true
{{.Title}}
{{end}}
{{end}}
Any attempt to insert a variable that is identical to “amazon” will not work in the not in construct. Why is this?
.File may show a string when printed but I don’t think it’s a string type, so in check its content as a map or slice. You should check File Variables and try with one of the available key, .File.BaseFileName or something.
Unfortunately, not that I can share which makes troubleshooting harder.
But the logic is sound right? If I add a new parameter to front matter, such as test = "amazon" and change the logic statement to
{{if not (in .URL .Params.test))}}
it works and shows the correct result. Only when I try to manipulate an existing variable, such as a file variable or even .Title and put it in the logic statement, it fails to show the correct result.
.File is a complex object, not a string. You should stick to the variables that is documented for Page (URL is not on that list, it is considered internal and could be removed without notice):