updated:  2024 20. November
published:  2021 13. January

Gohugo Funktionen, Methoden und Variablen

Zusammenstellung und Kurzinformation zu einigen ausgewählten Gohugo Funktionen, Methoden und Variablen.

Eine vollständige Liste aller Funktionen und Methoden sind auf der Gohugo Seite zu finden.

Eigene Funktion

In Gohugo ist es möglich eigene Funktionen zu schreiben und sie in Markdowndateien (*.md) oder Shortcodes (*.html) zu verwenden.

Zufallszahl generieren {{<random>}}

Als Beispiel für eine eigene Funktion wird eine Funktion zum Generieren einer Zufallszahl {{<random>}} eingerichtet. Folgende Dateien mit gleichem Namen werden in unterschiedliche Verzeichnisse angelegt.

Datei 1: ./layouts/partials/random.html

 {{ $seed := "foo" }}
 {{ $random := delimit (shuffle (split (md5 $seed) "" )) "" }}
 {{ $random }}

Datei 2: ./layouts/shortcodes/random.html

 {{ partial "random" . }}

In der Shortcodesdatei wird einfach die Datei ./layouts/partials/random.html aufgerufen. Damit ist die Funktion random für Markdown- und für Html-Dateien verfügbar und kann wie folgt aufgerufen werden.


 {{<random>}} 			// Aufruf in Markdown
 {{ partial "random" . }}	// Aufruf in Html
   

Ergebnis:

a84dcccb26d585dfc4ff8e4dccbca14e

Anwendungsbeispiel

Der Zufallsgenerator findet hervoragend Anwendung im automatischen generieren von eindeutigen Kennzeichen bei der Verwendung der Html-Elemente <input> und <label>. Eine beispielhafte Anwendung ist: ./layouts/shortcodes/expand.html


 {{ $zufall := partial "random" . }}
  ...
  <input id="expand.{{replaceRE "\\s" "" $zufall}}" ...  >
  <label for="expand.{{replaceRE "\\s" "" $zufall}}" ... >
 ...
   

Hinweis: Die in der Variablen $zufall enthaltene Zahl wird mit einem Leerzeichen (whitespace) übergeben.
Die Funktion {{replaceRE "\\s" "" $zufall}} ersetzt alle Leerzeichen "\\s" mit "" - nichts -.

Zeit- und Datumsangaben

Gohugo bietet eine eigene Time-Methode für Zeit- und Datumsangaben an. Insbesondere sind Datumsangaben der Seiten und Dateien interessant.

Aufruf in *.html Ergebnis
{{.Page.Date}}2021-01-13 09:20:15 +0100 CET
{{.Page.PublishDate}}2021-01-13 09:20:15 +0100 CET
{{.Page.Lastmod}}2024-11-20 16:52:02 +0100 CET
{{.Page.File.Path}}edv/gohugo/hilfe/funktion.md
{{$file := os.Stat (.Page.File.Path)}}
{{$file.ModTime}}2025-01-04 22:00:40.078619139 +0100 CET

Zur Datumsformatierung siehe folgende Tabelle.

Aufruf in *.html Ergebnis
{{.Page.Date}}2021-01-13 09:20:15 +0100 CET
{{.Page.Date.Format "January 2, 2006"}}January 13, 2021
{{.Page.Date.Format "02. Jan 2006 15:04"}}13. Jan 2021 09:20
{{.Page.Date.Format "02012006 15:04"}}13012021 09:20
{{.Page.Date.Format "20060102"}}20210113
Ausgabe des Datums mit .now
{{.now.Format "20060102 15:04"}}20250311 22:02

Gohugo Funktionen

Hinweis:
Die aufgeführten Funktionen können in entsprechenden *.html Dateien angewendet und aufgerufen werden. In Markdowndateien *.md ist das nicht möglich, bzw. nur über den Umweg eines entsprechenden Shortcodes (Stand: 01.2021):

GetPage

.GetPage liefert den Path einer Seite (*.md) zurück.


 {{ $variable01 := .Site.GetPage "funktion.md" }}
 {{ $variable01 }}     
   

urls.Parse

urls.Parse splitet eine URL (Uniform Resource Locator) in seine einzelnen Bestandteile.


 {{ $url := "https://www.vermessungsprogramme.de/test/system/gohugo/#Ueberschrift" }}
 {{ $parse := urls.Parse $url }}

 {{ $parse.Scheme }}
 {{ $parse.Host }}
 {{ $parse.Path }}
 {{ $parse.Fragment }}
   

Ergebnis (tabellarisch):

$parse.Scheme https
$parse.Host www.vermessungsprogramme.de
$parse.Path /test/system/gohugo/
$parse.Fragment Ueberschrift

readDir

Die Funktion readDir listet alle Dateien und Verzeichnisse auf.


 {{ $files := readDir "./content" }} 
 {{ range $files }} 
	{{ .Name }}
 {{ end }}
   

Ergebnis (tabellarisch):

edv
gaa
geo
impressum.md
kontakt.md
notice
search.md
status.md
test.md
version.txt

os.Stat

Für umfangreiche Datei- und Verzeichnisinformationen stehen weitere Funktionen von os.Stat bereit.


 {{ $files := readDir "./content" }} 
 {{ range $files }} 
	{{ .Name }}
	{{ .IsDir }}
	{{ .Size }}
	{{ .ModTime }}
 {{ end }}
   

Ergebnis (tabellarisch):

.Name .IsDir .Size .Modtime (zuletzt geändert) {{path.Ext .Name }}
edv true 4096 2025-01-04 22:00:40.082619157 +0100 CET
gaa true 4096 2025-01-04 22:00:40.089619188 +0100 CET
geo true 4096 2025-01-16 23:10:24.582798313 +0100 CET
impressum.md false 337 2025-01-04 22:00:40.090619193 +0100 CET .md
kontakt.md false 187 2025-01-04 22:00:40.090619193 +0100 CET .md
notice true 4096 2025-02-21 22:58:34.941375655 +0100 CET
search.md false 183 2025-01-04 22:00:40.090619193 +0100 CET .md
status.md false 1215 2025-02-21 23:08:26.408364791 +0100 CET .md
test.md false 314 2025-02-21 22:52:34.278970169 +0100 CET .md
version.txt false 13 2025-03-11 22:02:46.488129461 +0100 CET .txt

Die Variable .ModTime der Funktion os.Stat gibt die letzte Modifizierungszeit der Datei an. Diese ist identisch mit der im Dateimanager angegebenen Zeit.

Aufruf in *.html Ergebnis
{{.Page.File.Path}}edv/gohugo/hilfe/funktion.md
{{$file := os.Stat (.Page.File.Path)}}
{{$file.ModTime}}2025-01-04 22:00:40.078619139 +0100 CET

Scratch - newScratch

.Scratch dient zum Speichern und Bearbeiten von Daten. Das folgende Beispiel zeigt die Verwendung von .Scratch.Set und .Scratch.Add. Durch die Funktion .Scratch.Get wird letztendlich die Variable XXX ausgegeben.


 {{ $var01 := path.Dir .Page.File }}
 {{ $.Scratch.Set "XXX" $var01 }}
 {{ $.Scratch.Get "XXX" }}
 {{ $.Scratch.Set "ZZZ" $var01 }}
 {{ $.Scratch.Add "ZZZ" "/image" }}
 {{ $.Scratch.Get "ZZZ" }}
   

Ergebnis:

{{ $.Scratch.Get "XXX" }} .
{{ $.Scratch.Get "ZZZ" }} ./image

Hinweis: Es kann vorkommen das .Scratch nicht funktioniert und Gohugo mit einer Fehlermeldung den Dienst verweigert.


 execute of template failed at <$.Scratch.Set>: can’t evaluate field Scratch in type goldmark.linkContext
   

Verwende in diesem Fall die Funktion newScratch. Mit der Funktion newScratch kann jeder Variablen auch eine Scratch-Instanz zugewiesen werden.


 {{ $var01 := path.Dir .Page.File }}
 {{ $storage := newScratch }}	
 {{ $storage.Set "XXX" $var01 }}
 {{ $storage.Get "XXX" }}
 {{ $storage.Add "XXX" "/image" }}
   

Path Funktionen

Am Beispiel des Rückgabewertes der Methode .Page.File werden die Ergebnisse der Path-Funktion in der Tabelle gezeigt. Besonders interessant ist die Funktion path.Clean . Diese ersetzt den in Windows verwendeten Backslash in ein Slash und löscht Doppelslash.

Aufruf in *.html Ergebnis
{{.Page.File}}funktion
{{path.Base (.Page.File)}}funktion
{{path.Clean (.Page.File)}}funktion
{{path.Clean "a\\b//x/zz/"}}a\b/x/zz
{{path.Dir (.Page.File)}}.
{{path.Ext (.Page.File)}}
{{path.Join "yyy" (.Page.File)}}yyy/funktion

Die Funktion path.Split unterteilt in Verzeichnisnamen und Dateinamen.

Aufruf in *.html Ergebnis
{{.Page.File}}funktion
{{$dirFile := path.Split (.Page.File)}}
{{$dirFile.Dir}}
{{$dirFile.File}}funktion

Strings

Beispiele um Strings zu verarbeiten.

TrimRight 1 Ergebnis
{{ $var01 := .Page.Permalink }}
{{ $var01 }} https://www.vermessungsprogramme.de/edv/gohugo/hilfe/funktion/
{{ strings.TrimRight "tion/" $var01 }} https://www.vermessungsprogramme.de/edv/gohugo/hilfe/funk

TrimRight 2 Ergebnis
{{$var02 := .Page.File.BaseFileName}}
{{$var02}}funktion
{{strings.TrimRight $var02 (strings.TrimRight "/" $var01)}}https://www.vermessungsprogramme.de/edv/gohugo/hilfe/

String Count Ergebnis
{{"Hello, world" | strings.RuneCount}}12
{{"Hello, world" | countrunes}}11
{{"aaabaab" | strings.Count "a"}}5
{{"aaabaab" | strings.Count "aa"}}2
{{"aaabaab" | strings.Count "aaa"}}1
{{"aaabaab" | strings.Count ""}}8
{{"aaab aab" | strings.Count ""}}8

FindRE - Suchen und finden

Die Funktion FindRE sucht eine Zeichenfolge mittels regulärer Ausdrücke in einer Datei oder einem String und gibt das Ergebnis als range zurück.

Ein regulärer Ausdruck (engl.: Regular expressions) ist die Beschreibung einer bestimmten Menge von Zeichen in einer Folge.

Beispiel 1

Das Beispiel <a href.*?>(.|\n)*?</a> sucht alle Hyperlinks in einer Html-Datei. Also alles, was mit <a href beginnt und mit </a> endet.


 {{ $findReturn := findRE `<a href.*?>(.|\n)*?</a>` (readFile "./themes/mab-3.0/layouts/partials/header.html" ) }}

 <!-- Anzahl gefundener Übereinstimmungen -->
 {{ $count := len $findReturn }}

 <!-- Ausgabebeispiel 1 per index --> 
 {{ $out := index $findReturn 0 }} {{ $out }}
 {{ $out := index $findReturn 1 }} {{ $out }}
 {{ $out := index $findReturn 2 }} {{ $out }}

 <!-- Ausgabebeispiel 2 per range --> 
 {{ range $element, $findReturn }}
	{{ $element }}
 {{ end }}

 <!-- Ausgabebeispiel 3 per range und increment -->
 {{ range $i, $element := $findReturn }}
	{{ $i }} {{ $element }}
 {{ end }}		
   

Ergebnis Ausgabebeispiel 1 per index
<a href="{{ .Site.BaseURL }}" class="logo" title="Home"><img src="/bilder/home4.png" class="logo" alt="Home"></a>
<a href="#top" class="logo" title="Top"><img src="/bilder/arrow-up.png" class="logo" alt="top"></a>
<a href="#top" class="logo" title="Top"><img src="/bilder/arrow-up.png" class="logo" alt="top"></a>

Ergebnis Ausgabebeispiel 2 per range
<a href="{{ .Site.BaseURL }}" class="logo" title="Home"><img src="/bilder/home4.png" class="logo" alt="Home"></a>
<a href="#top" class="logo" title="Top"><img src="/bilder/arrow-up.png" class="logo" alt="top"></a>
<a href="{{.Site.BaseURL}}/search" class="logo" title="Suchen"><img src="/bilder/lupe4.png" class="logo" alt="Search"></a>
<a href="{{ .URL }}">{{- .Name -}} <!--span class="icon-desktop-menu">&#9655;</span--></a>
<a href="{{ .URL }}">{{ .Name }} <span class="icon-desktop-menu">&#9655;</span></a>
<a href="{{ .URL }}">{{ .Name }}</a>
<a href="{{ .URL }}">{{ .Name }}</a>

Ergebnis Ausgabebeispiel 3 per range und increment
0<a href="{{ .Site.BaseURL }}" class="logo" title="Home"><img src="/bilder/home4.png" class="logo" alt="Home"></a>
1<a href="#top" class="logo" title="Top"><img src="/bilder/arrow-up.png" class="logo" alt="top"></a>
2<a href="{{.Site.BaseURL}}/search" class="logo" title="Suchen"><img src="/bilder/lupe4.png" class="logo" alt="Search"></a>
3<a href="{{ .URL }}">{{- .Name -}} <!--span class="icon-desktop-menu">&#9655;</span--></a>
4<a href="{{ .URL }}">{{ .Name }} <span class="icon-desktop-menu">&#9655;</span></a>
5<a href="{{ .URL }}">{{ .Name }}</a>
6<a href="{{ .URL }}">{{ .Name }}</a>

Beispiel 2

In der Variablen SuchString wird nur der Teil in der geschweiften Klammer extrahiert. Der verwendete reguläre Ausdruck {[[:word:][:space:]]*} sucht ein oder mehrere der Zeichen [0-9A-Za-z_] [\t\n\v\f\r ], die sich innerhalb der geschweiften Klammer befinden.


 {{- $SuchString := "Erster Teil des Strings {Zweiter Teil des Strings}" -}}
 {{- $step1 := findRE `{[[:word:][:space:]]*}` $SuchString  -}}
 {{- if ne (len $step1) 0 -}}
	{{- $step2 := index $step1 0 -}}
	{{- $step3 := trim $step2 "{}" -}}
		
	<br>SuchString = {{ $SuchString }}
	<br>
	<br>Teil1 = {{ $step1 }}
	<br>Teil2 = {{ $step2 }}
	<br>Teil3 = {{ $step3 }}
	<br>
	{{- range $index, $value := split $step3 " " -}}
		{{- if ne $value "" -}}
			<br>Wert {{ $index }} = {{ $value }}
		{{- end -}}
	{{- end -}}
 {{- end -}}
   

Ergebnis:


SuchString = Erster Teil des Strings {Zweiter Teil des Strings}

Teil1 = [{Zweiter Teil des Strings}]
Teil2 = {Zweiter Teil des Strings}
Teil3 = Zweiter Teil des Strings

Wert 0 = Zweiter
Wert 1 = Teil
Wert 2 = des
Wert 3 = Strings

Gohugo Methoden

Für die Verwendung in Webseiten stellt Gohugo eine Vielzahl von Methoden zur Verfügung.

Site

Mit dem englischen Begriff Site ist im deutschen Sprachgebrauch eine Webseite gemeint. Die Site-Variable dient dem Zugriff auf globale Variablen eines Webseitenprojektes.

Aufruf in *.html Ergebnis
{{.Site.AllPages}}Pages(384)
{{.Site.BaseURL}}https://www.vermessungsprogramme.de/
{{.Site.BuildDrafts}}false
{{.Site.Copyright}}
{{.Site.Data}}map[sample_tomlTable:map[row:[map[data:[Animal Sound yupi]] map[data:[Cat Meow blub]] map[data:[Dog Woof tata]] map[data:[Dog Woof tata nenene]]] table:map[]]]
{{.Site.Home}}/
{{.Site.Language}}de
{{.Site.Language.Lang}}de
{{.Site.Language.LanguageName}}
{{.Site.Language.Weight}}0
{{.Site.Lastmod}}2025-03-10 21:27:48 +0100 CET
{{.Site.Pages}}Pages(384)
{{.Site.RegularPages}}Pages(147)
{{.Site.Sections}}Pages(4)
{{.Site.Taxonomies}}TaxonomyList(1)
{{.Site.Title}}Manual
{{.Site.Params}}map[author:map[copyright:© 2024 Andre <a href="https://creativecommons.org/licenses/by/4.0/">Some rights reserved</a>. email:test@test.com name:mab] debug:false version:20250311-01 viewtestsite:false]
{{.Site.Params.mainSections}}[edv]
{{.Site.Menus}}map[main:[0xc000249ea0 0xc000249a40 0xc0002ce380 0xc0002cea80]]

Page

Mit der Methode .Page kann auf Eigenschaften einer Markdown-Inhaltsseite (*.md) zugegriffen werden.

Page.File

Die Variable .Page.File gibt Informationen über die Markdowndatei zurück.

Aufruf in *.html Ergebnis
{{ .Page.File }}funktion
{{ .Page.File.Path }}edv/gohugo/hilfe/funktion.md
{{ .Page.File.Dir }}edv/gohugo/hilfe/
{{ .Page.File.LogicalName }}funktion.md
{{ .Page.File.BaseFileName }}funktion
{{ .Page.File.Ext }}md
{{ .Page.Language.Lang }}de
{{ .Page.File.UniqueID }} a924ef826a70d30763816a9601cfb5a1
{{ .Page.File.TranslationBaseName }} funktion
{{ .Page.File.ContentBaseName }} funktion

Page.GitInfo

Mit der Variablen .GitInfo kann auf Information der Git-Versionsverwaltung zugegriffen werden, sofern man Git in einem Gohugo-Projekt verwendet. Die Information beziehen auf die angegebene Markdown-Inhaltseite (*.md).

Aufruf in *.html Ergebnis
{{.Page.GitInfo}}{ec737a5393d4347360a19e06b7796e2de1073f67 ec737a5 RSS-Feed andre andre@localhost 2024-11-20 16:52:02 +0100 CET 2024-11-21 13:37:29 +0100 CET }
{{.Page.GitInfo.AbbreviatedHash}}ec737a5
{{.Page.GitInfo.AuthorName}}andre
{{.Page.GitInfo.AuthorEmail}}andre@localhost
{{.Page.GitInfo.AuthorDate}}2024-11-20 16:52:02 +0100 CET
{{.Page.GitInfo.Hash}}ec737a5393d4347360a19e06b7796e2de1073f67
{{.Page.GitInfo.Subject}}RSS-Feed
{{.Page.GitInfo.CommitDate}}2024-11-21 13:37:29 +0100 CET
{{.Page.GitInfo.Body}}

Folgender Schalter muss in der Datei config.toml gesetzt sein.

config.toml

 enableGitInfo          = true

Page.Params

Page.Params beinhaltet alle Variablen im Kopf einer Markdowndatei.

Kopf einer Markdowndatei ./content/../*.md

 +++
 tags = ["dev", "gohugo", "funktion"]
 zusammenfassung = "Zusammenstellung und Kurzinformation zu einigen ausgewählten Gohugo Funktionen und Variablen."
 title = "Gohugo Funktionen und Variablen"
 submenu = "false"
 date = "2021-01-13T09:20:15+01:00"
 type = "article"
 +++

Der Zugriff kann per Einzelabruf, per Range oder zusammen erfolgen.

Ausgabe .Page.Params (einzeln) Ergebnis
{{ .Page.Params.tags }} [dev gohugo funktion]
{{ .Page.Params.type }} article
{{ .Page.Params.title }} Gohugo Funktionen, Methoden und Variablen
{{ .Page.Params.submenu }} false
usw.

Ausgabe per range)
date2021-01-13 09:20:15 +0100 CET
draftfalse
iscjklanguagefalse
lastmod2024-11-20 16:52:02 +0100 CET
publishdate2021-01-13 09:20:15 +0100 CET
submenufalse
tags[dev gohugo funktion]
titleGohugo Funktionen, Methoden und Variablen
typearticle
zusammenfassungZusammenstellung und Kurzinformation zu einigen ausgewählten Gohugo Funktionen, Methoden und Variablen.

Ausgabe .Page.Params (zusammen)
map[date:2021-01-13 09:20:15 +0100 CET draft:false iscjklanguage:false lastmod:2024-11-20 16:52:02 +0100 CET publishdate:2021-01-13 09:20:15 +0100 CET submenu:false tags:[dev gohugo funktion] title:Gohugo Funktionen, Methoden und Variablen type:article zusammenfassung:Zusammenstellung und Kurzinformation zu einigen ausgewählten Gohugo Funktionen, Methoden und Variablen.]

Weitere Page.Variablen

Aufruf in *.html Ergebnis
{{ .Page.Ancestors }} Pages(4)
{{ .Page.Aliases }} []
{{ .Page.IsHome }} false
{{ .Page.IsNode }} false
{{ .Page.IsPage }} true
{{ .Page.IsSection }} false
{{ .Page.BundleType }}
{{ .Page.IsTranslated }} false
{{ .Page.Type }} article
{{ .Page.WordCount }} 0
{{ .Page.Kind }} page
{{ .Page.Language }} de
{{ .Page.Keywords }} []
{{ .Page.LinkTitle }} Gohugo Funktionen, Methoden und Variablen
{{ .Page.Permalink }} https://www.vermessungsprogramme.de/edv/gohugo/hilfe/funktion/
{{ .Page.RelPermalink }} /edv/gohugo/hilfe/funktion/
{{ .Page.PlainWords }} []
{{ .Page.Resources }} []
{{ .Page.Draft }} false
{{ .Page.Date }} 2021-01-13 09:20:15 +0100 CET
{{ .Page.Lastmod }} 2024-11-20 16:52:02 +0100 CET
{{ .Page.ExpiryDate }} 0001-01-01 00:00:00 +0000 UTC
{{ .Page.PublishDate }} 2021-01-13 09:20:15 +0100 CET
{{ .Page.Section }} edv
{{ .Page.Sections }} Pages(0)
{{ .Page.FirstSection }} /home/andre/Programmierung/hugo/work/content/edv/_index.md
{{ .Page.CurrentSection }} /home/andre/Programmierung/hugo/work/content/edv/gohugo/hilfe/_index.md
{{ .Page.Parent }} /home/andre/Programmierung/hugo/work/content/edv/gohugo/hilfe/_index.md
Stichworte (tags)