## case
## Description
When evaluating a large number of conditions.
## Syntax
## Example
## for
## Description
Loop over a collection.
## Syntax
## Example
Instead of looping over an existing collection, you can define a range of numbers to loop through. The range can be defined by both literal and variable numbers:
## Variables
During every for loop there are following helper variables available for extra styling needs:
Name | Type | Description |
forloop.length | Integer | length of the entire for loop |
forloop.index | Integer | index of the current iteration |
forloop.index0 | Integer | index of the current iteration (zero based) |
forloop.rindex | Integer | how many items are still left? |
forloop.rindex0 | Integer | how many items are still left? (zero based) |
forloop.first | Boolean | is this the first iteration? |
forloop.last | Boolean | is this the last iteration? |
## Parameters
Usefulness of a for loop can be enhanced by using parameters, such as `reversed
` `limit
` and `offset
` to manipulate the objects being displayed. [Read more](🔗)
## if/else/unless
## Description
Boolean logic operations are available on all objects.
## Syntax
## Example
## Contains
Contains allows you to check if an array contains a specific string. This is very useful when dealing with `many_to_many
` relationships. It will allow you to iterate over related entries, making sure there are no double entries.
Let's say we have a `many_to_many
` relationship between `events
` and `performances
`, meaning that the same performance can belong to multiple events.
So if we want to iterate over all our `events
` to get all `performances
` but we don't want double entries, we could use contains.