Solución:
Una de las mejores maneras de lograr múltiples niveles de plantillas usando jinja2 es usar ‘incluir’ digamos que tienes ‘base_layout.html‘como plantilla base
<!DOCTYPE html>
<title>Base Layout</title>
<div>
<h1>Base</h1>
.... // write your code here
{% block body %}{% endblock %}
</div>
y luego quieres tener ‘child_layout.html‘que extiende’ base_layout.
{% include "base_layout.html" %}
<div>
... // write your code here
</div>
{% block body %}{% endblock %}
y ahora tu página puede simplemente extenderse ‘child_layout.html‘y tendrá ambos base_layout.html y child_layout.html
{% extends "child_layout.html" %}
{% block body %}
...// write your code here
{% endblock %}
Por la forma en que la documentación estaba redactada, parecía que no admitía niveles de herencia (n) de profundidad.
A diferencia de Python, Jinja no admite herencia múltiple. Por lo tanto, solo puede tener una etiqueta de extensión llamada por representación.
No sabía que era solo una regla que decía 1 extensión por plantilla … Ahora lo sé, con algo de ayuda del canal jinja irc.
Prueba esto, esto funciona para mí gracias a la respuesta de @Ixm.
base.html
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
{% block content %}{% endblock %}
</body>
</html>
content.html
{% extends "base.html" %}
{% block content %}
<table>
<tr>
{% include "footer.html" %}
</tr>
</table>
{% endblock %}
footer.html
{% block footer %} <td> test</td>{% endblock %}
y llama con
env = Environment(loader=FileSystemLoader(os.path.join(path, "Layouts")))
template = env.get_template('content.html')
html = template.render()
print html