IsDescendant
文法
PAGE1.IsDescendant PAGE2
戻り値
bool
以下において セクション とはトップレベルのコンテントディレクトリのことです。 または _index.md ファイルを持つコンテントディレクトリのことです。
以下のコンテント構造があるとします。
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
“auctions” ページのレンダリング処理においては以下のようになります。
{{ with .Site.GetPage "/" }}
{{ $.IsDescendant . }} → true
{{ end }}
{{ with .Site.GetPage "/auctions" }}
{{ $.IsDescendant . }} → false
{{ end }}
{{ with .Site.GetPage "/auctions/2023-11" }}
{{ $.IsDescendant . }} → false
{{ end }}
{{ with .Site.GetPage "/auctions/2023-11/auction-2" }}
{{ $.IsDescendant . }} → false
{{ end }}
上の例では with
命令を使って安全なコーディングを行っています。
こうしておくと、ページが存在しない場合には何も返しません。
else
節を加えると、エラー処理を行うことができます。
{{ $path := "/auctions/2023-11" }}
{{ with .Site.GetPage $path }}
{{ $.IsDescendant . }} → true
{{ else }}
{{ errorf "Unable to find the section with path %s" $path }}
{{ end }}
コンテントに対する理解
with
ブロック内での コンテキスト (ドット) は、そのセクションの Page
オブジェクトであって、テンプレートに受け渡された Page
オブジェクトではありません。
以下の構文を考えます。
{{ with .Site.GetPage "/auctions" }}
{{ .IsDescendant . }} → true
{{ end }}
上のコードが “auction-1” ページのレンダリング処理である場合、その結果は誤っていることになります。 というのも、セクションページとそれ自体を比較していることになるからです。
{{ with .Site.GetPage "/auctions" }}
{{ $.IsDescendant . }} → true
{{ end }}