The Path
method on a Page
object returns the [logical path] of the given page, regardless of whether the page is backed by a file.
{{ .Path }} → /posts/post-1
This value is neither a file path nor a relative URL. It is a logical identifier for each page, independent of content format, language, and URL modifiers.
To determine the logical path for pages backed by a file, Hugo starts with the file path, relative to the content
directory, and then:
- Strips the file extension
- Strips the language identifier
- Converts the result to lower case
- Replaces spaces with hyphens
The value returned by the Path
method on a Page
object is independent of content format, language, and URL modifiers such as the slug
and url
front matter fields.
Examples #
Monolingual site #
Note that the logical path is independent of content format and URL modifiers.
File path | Front matter slug | Logical path |
---|---|---|
content/_index.md |
/ |
|
content/posts/_index.md |
/posts |
|
content/posts/post-1.md |
foo |
/posts/post-1 |
content/posts/post-2.html |
bar |
/posts/post-2 |
Multilingual site #
Note that the logical path is independent of content format, language identifiers, and URL modifiers.
File path | Front matter slug | Logical path |
---|---|---|
content/_index.en.md |
/ |
|
content/_index.de.md |
/ |
|
content/posts/_index.en.md |
/posts |
|
content/posts/_index.de.md |
/posts |
|
content/posts/posts-1.en.md |
foo |
/posts/post-1 |
content/posts/posts-1.de.md |
foo |
/posts/post-1 |
content/posts/posts-2.en.html |
bar |
/posts/post-2 |
content/posts/posts-2.de.html |
bar |
/posts/post-2 |
Pages not backed by a file #
The Path
method on a Page
object returns a value regardless of whether the page is backed by a file.
content/
└── posts/
└── post-1.md <-- front matter: tags = ['hugo']
When you build the site:
public/
├── posts/
│ ├── post-1/
│ │ └── index.html .Page.Path = /posts/post-1
│ └── index.html .Page.Path = /posts
├── tags/
│ ├── hugo/
│ │ └── index.html .Page.Path = /tags/hugo
│ └── index.html .Page.Path = /tags
└── index.html .Page.Path = /
Finding pages #
These methods, functions, and shortcodes use the logical path to find the given page:
Methods | Functions | Shortcodes |
---|---|---|
[Site.GetPage ] |
[urls.Ref ] |
[ref ] |
[Page.GetPage ] |
[urls.RelRef ] |
[relref ] |
[Page.Ref ] |
||
[Page.RelRef ] |
||
[Shortcode.Ref ] |
||
[Shortcode.RelRef ] |
Logical tree #
Just as file paths form a file tree, logical paths form a logical tree.
A file tree:
content/
└── s1/
├── p1/
│ └── index.md
└── p2.md
The same content represented as a logical tree:
content/
└── s1/
├── p1
└── p2
A key difference between these trees is the relative path from p1 to p2:
- In the file tree, the relative path from p1 to p2 is
../p2.md
- In the logical tree, the relative path is
p2