Hugo:用 link 和逗号分隔列出标签?

Hugo: List tags with link and comma separated?

我正在使用 Hugo 制作一个网站,我想显示一个页面所有标签的可点击逗号分隔列表。

我可以像这样简单地显示所有标签:

Tags: {{ delimit .Params.tags ", " }}

但是,标签不可点击。我可以使用 range:

让它们可点击
Tags:
{{ range .Params.tags }}
<a href='{{ "/tags/" | relLangURL }}{{ . | urlize }}'>{{ . | humanize }}</a>,
{{ end }}

但是我有一个不应该出现的尾随逗号。

我有这个修复程序,我将逗号包裹在 css class unlessLast 中,然后使用 css:

隐藏它
.unlessLast:last-child {
    display: none;
}

但我想知道是否有一种好方法甚至不生成 Hugo 的尾随逗号。

那么,如何正确删除这个逗号?

我想通了,我在每个元素前面添加一个,而不是尾随 ,,但隐藏第一个。检查一个元素是否是第一个很容易:

{{ range $i, $e := .Params.tags -}}
    {{- if $i -}}, {{ end -}}
    <a href='{{ "/tags/" | relLangURL }}{{ . | urlize }}'>{{ $e | humanize }}</a>
{{- end -}}

在 li 布局上尝试此语句,这将显示为带有 link

的单独列表
{{ range $key, $value := .Params.categories }}
  {{if ne $value "null"}}
    <span class="tag-style-1"><a href="/tag/{{ $value | urlize  }}">{{ $value }}</a></span>
  {{end}}
{{ end }}      

我有这个解决方法:

<strong>{{ Tags: }}</strong>
{{ range $key, $value := .Params.tags }}
   <a href="{{ "/tags/" }}{{ $value | urlize }}">{{ $value }}</a>{{ if ne $key (sub (len $.Params.tags) 1) }}, {{ else }}{{ end }}
{{ end }}

代码解释: 最后一个元素的逗号将被跳过,这是询问循环是否还没有到达最后一个元素 {{ if ne $key (sub (len $.Params.tags) 1) } },直到没有,才会打印逗号。请注意,这里我们使用全局运算符 $ 来访问 .Params.tags 的全局上下文并避免范围循环的上下文 <- 这很重要.

一个更简短的方法可能是这样的:

<strong>{{ Tags: }}</strong>
{{ range $key, $value := .Params.tags }}
   <a href="{{ "/tags/" }}{{ $value | urlize }}">{{ if $key }}, {{ end }}{{ $value }}</a>
{{ end }}

代码解释: Hugo 会将 0 视为 false,然后,它不会为第一个元素打印逗号,而是为其余元素打印,在标签后面 (ej: tag1 ,tag2 ,tag3)。这种方法的问题是逗号也会被 url 化。