mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-14 20:37:55 -05:00
100 lines
2.5 KiB
Markdown
100 lines
2.5 KiB
Markdown
---
|
|
title: IsAncestor
|
|
description: Reports whether PAGE1 is an ancestor of PAGE2.
|
|
categories: []
|
|
keywords: []
|
|
action:
|
|
related:
|
|
- methods/page/Ancestors
|
|
- methods/page/CurrentSection
|
|
- methods/page/FirstSection
|
|
- methods/page/InSection
|
|
- methods/page/IsDescendant
|
|
- methods/page/Parent
|
|
- methods/page/Sections
|
|
returnType: bool
|
|
signatures: [PAGE1.IsAncestor PAGE2]
|
|
toc: true
|
|
---
|
|
|
|
{{% include "methods/page/_common/definition-of-section.md" %}}
|
|
|
|
With this content structure:
|
|
|
|
```text
|
|
content/
|
|
├── auctions/
|
|
│ ├── 2023-11/
|
|
│ │ ├── _index.md
|
|
│ │ ├── auction-1.md
|
|
│ │ └── auction-2.md
|
|
│ ├── 2023-12/
|
|
│ │ ├── _index.md
|
|
│ │ ├── auction-3.md
|
|
│ │ └── auction-4.md
|
|
│ ├── _index.md
|
|
│ ├── bidding.md
|
|
│ └── payment.md
|
|
└── _index.md
|
|
```
|
|
|
|
When rendering the "auctions" page:
|
|
|
|
```go-html-template
|
|
{{ with .Site.GetPage "/" }}
|
|
{{ $.IsAncestor . }} → false
|
|
{{ end }}
|
|
|
|
{{ with .Site.GetPage "/auctions" }}
|
|
{{ $.IsAncestor . }} → false
|
|
{{ end }}
|
|
|
|
{{ with .Site.GetPage "/auctions/2023-11" }}
|
|
{{ $.IsAncestor . }} → true
|
|
{{ end }}
|
|
|
|
{{ with .Site.GetPage "/auctions/2023-11/auction-2" }}
|
|
{{ $.IsAncestor . }} → true
|
|
{{ end }}
|
|
```
|
|
|
|
In the examples above we are coding defensively using the [`with`] statement, returning nothing if the page does not exist. By adding an [`else`] clause we can do some error reporting:
|
|
|
|
```go-html-template
|
|
{{ $path := "/auctions/2023-11" }}
|
|
{{ with .Site.GetPage $path }}
|
|
{{ $.IsAncestor . }} → true
|
|
{{ else }}
|
|
{{ errorf "Unable to find the section with path %s" $path }}
|
|
{{ end }}
|
|
```
|
|
|
|
## Understanding context
|
|
|
|
Inside of the `with` block, the [context] (the dot) is the section `Page` object, not the `Page` object passed into the template. If we were to use this syntax:
|
|
|
|
```go-html-template
|
|
{{ with .Site.GetPage "/auctions" }}
|
|
{{ .IsAncestor . }} → true
|
|
{{ end }}
|
|
```
|
|
|
|
The result would be wrong when rendering the "auction-1" page because we are comparing the section page to itself.
|
|
|
|
{{% note %}}
|
|
Use the `$` to get the context passed into the template.
|
|
{{% /note %}}
|
|
|
|
```go-html-template
|
|
{{ with .Site.GetPage "/auctions" }}
|
|
{{ $.IsAncestor . }} → true
|
|
{{ end }}
|
|
```
|
|
|
|
{{% note %}}
|
|
Gaining a thorough understanding of context is critical for anyone writing template code.
|
|
{{% /note %}}
|
|
|
|
[context]: /getting-started/glossary/#context
|
|
[`with`]: /functions/go-template/with/
|
|
[`else`]: /functions/go-template/else/
|