Jinja comes with some utility tags shipped. Those arn't necessary but can help you with your templates.
Captures output and stores it in a variable:
{% capture as loopdata %}
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption|escapexml }}</a></li>
{% endfor %}
{% endcapture %}
The output of the for loop is now stored in the variable loopdata.
This allows the double usage of block tags:
{% capture as title %}{% marker "title" %}{% endcapture %}
<html>
<head>
<title>{{ title|escapexml }} | My Webpage</title>
</head>
<body>
<h1>{{ title }}</h1>
{% marker "body" %}
</body>
</html>
{% define %} allows you to set a variable.
Usage:
{% define my_variable "Some Value" %}
You can also apply filters:
{% define escaped content | escapexml %}