Hugo 中的连接变量

问题描述 投票:0回答:2

这个片段在 Hugo 上效果非常好:

   {{ if and (or .IsPage .IsSection) .Site.Params.contentCommitsURL }}
                  {{ $File := .File }}
                  {{ $Site := .Site }}
                  {{with $File.Path }}
                  <a href="{{ $Site.Params.contentCommitsURL }}{{ replace $File.Dir "\\" "/" }}{{ $File.LogicalName }}" target="blank">Link to API call</a>
                  {{ end }}
                {{ end }}

与,

[Params]
contentCommitsURL = https://api.github.com/repos/csitauthority/CSITauthority.github.io/commits?path=HUGO/content/

它能够精美地生成以下链接

API调用链接

layout
html 文件中。


问题描述

URL 已生成。现在,我正在努力弄清楚如何在页面变量(例如

{ $Site.Params.contentCommitsURL }}{{ replace $File.Dir "\\" "/" }}{{ $File.LogicalName }}
)中连接命令 
{{ $url }}

例如:

{{ $url := {{ $Site.Params.contentCommitsURL }}{{ replace $File.Dir "\\" "/" }}{{ $File.LogicalName }} }}

不起作用

但以下情况确实如此:

{{ $url := "https://api.github.com/repos/csitauthority/CSITauthority.github.io/commits?path=HUGO/content/post/vlan-101.md"}}

我希望能够做这样的事情:

{{ $url := $Site.Params.contentCommitsURL + (replace $File.Dir "\\" "/") + $File.LogicalName }}

^显然,这是行不通的。我想知道有什么作用。

hugo
2个回答
1
投票

在 Hugo 论坛上,有人暗示了一个解决方案,我能够想出以下内容。

{{ if and (or .IsPage .IsSection) .Site.Params.contentCommitsURL }}
      {{ $File := .File }}
      {{ $Site := .Site }}
      {{with $File.Path }}
      {{ $fileDir := replace $File.Dir "\\" "/"}}
        {{ $url := $File.LogicalName | printf "%s%s" $fileDir | printf "%s%s" $Site.Params.contentCommitsURL }}
        {{ $.Scratch.Set "url" $url }}
      {{ end }}
    {{ end }}

在我希望它出现的地方,我使用

Scratch
函数,如下所示:

{{ $url := $.Scratch.Get "url"}}
  {{ range getJSON $url }}
    <div style="display:inline-block; width:40px;"><a href="{{.author.html_url}}" target="_blank">
    <img src="{{.author.avatar_url}}" alt="{{.author.login}}" text="{{.author.login}}" class="inline" width="40" height="40" style="height: 40px;height: 40px; vertical-align:middle; margin: 0 auto;"></a>
  </div>
  {{ end }}

代码是不言自明的,所以我不会费心去进行详细的描述。相反,我想让您将注意力集中在实施上。您会注意到已使用

Scratch
函数。

hugo 文档是这样说的:

如果条件和类似条件在内部定义的变量在外部不可见。

(见本期)

这是一种临时存储该值的解决方法。 这里有更多关于刮擦的内容

限制

到目前为止,我觉得这段代码还不完整。它有效,但是它根据提交显示作者。因此多次提交会多次生成同一作者。我将这个限制提请您注意,以开发一个创造性的解决方案。当我得到满意的答案时,我会更新这个答案。同时,欢迎提出建议。

这里是我对hugo discourse的原始回答。


0
投票

您可以通过以下方式加入他们:

1 个参数

{{ $variable := printf "%s" $args_1st_in_string | printf "%s" }}

2 个参数

{{ $variable := printf "%s" $args_1st_in_string | printf "%s%s" $args_2nd_in_string | printf "%s" }}

多个参数

{{ $variable := printf "%s" $args_1st_in_string | ..... | printf "%s%s" $args_last_args_in_string | printf "%s" }}
© www.soinside.com 2019 - 2024. All rights reserved.