Path

Path


Returns the logical path of the given page.

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:

  1. Strips the file extension
  2. Strips the language identifier
  3. Converts the result to lower case
  4. 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