2.9 KiB

title linktitle description godocref date publishdate lastmod categories tags signature workson hugoversion relatedfuncs deprecated toc needsexample
where where Filters an array to only the elements containing a matching value for a given field. 2017-02-01 2017-02-01 2017-02-01
functions
filtering
lists
taxonomies
terms
groups
intersect
first
false true true

where filters an array to only the elements containing a matching value for a given field.

{{ range where .Data.Pages "Section" "post" }}
  {{ .Content }}
{{ end }}

It can be used by dot-chaining the second argument to refer to a nested element of a value.

+++
series: golang
+++
{{ range where .Site.Pages "Params.series" "golang" }}
   {{ .Content }}
{{ end }}

It can also be used with the logical operators !=, >=, in, etc. Without an operator, where compares a given field with a matching value equivalent to =.

{{ range where .Data.Pages "Section" "!=" "post" }}
   {{ .Content }}
{{ end }}

The following logical operators are vailable with where:

  • =, ==, eq: True if a given field value equals a matching value
  • !=, <>, ne: True if a given field value doesn't equal a matching value
  • >=, ge: True if a given field value is greater than or equal to a matching value
  • >, gt: True if a given field value is greater than a matching value
  • <=, le: True if a given field value is lesser than or equal to a matching value
  • <, lt: True if a given field value is lesser than a matching value
  • in: True if a given field value is included in a matching value. A matching value must be an array or a slice
  • not in: True if a given field value isn't included in a matching value. A matching value must be an array or a slice
  • intersect: True if a given field value that is a slice / array of strings or integers contains elements in common with the matching value. It follows the same rules as the intersect function.

Using where with intersect

{{ range where .Site.Pages ".Params.tags" "intersect" .Params.tags }}
  {{ if ne .Permalink $.Permalink }}
    {{ .Render "summary" }}
  {{ end }}
{{ end }}

Using where with first

{{ range first 5 (where .Data.Pages "Section" "post") }}
   {{ .Content }}
{{ end }}

Nesting where Clauses

Needs Example

Unset Fields

Filtering only works for set fields. To check whether a field is set or exists, you can use the operand nil.

This can be useful to filter a small amount of pages from a large pool. Instead of set field on all pages, you can set field on required pages only.

Only the following operators are available for nil

  • =, ==, eq: True if the given field is not set.
  • !=, <>, ne: True if the given field is set.
{{ range where .Data.Pages ".Params.specialpost" "!=" nil }}
   {{ .Content }}
{{ end }}