No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

¿Qué son los templates con Jinja?

24/29
Recursos

Aportes 5

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

from datetime import datetime
from airflow import DAG
from airflow.operators.bash import BashOperator


templated_command = """
{% for file in params.filenames %}
    echo "{{ ds }}"
	echo "{{ file }}"
{% endfor %}
"""


with DAG(dag_id="8-templating",
    description="Example using templates",
    schedule_interval="@daily",
    start_date=datetime(2022, 8, 10),
    end_date=datetime(2022, 8, 25),
    max_active_runs=1
) as dag:

    t1 = BashOperator(task_id="tarea_1",
					  bash_command=templated_command,
					  params={"filenames": ["file1.txt", "file2.txt"]},
					  depends_on_past=True)

    t1

📁 Este la herramienta que recomienda el profe al final de la clase
https://docs.getdbt.com/docs/build/jinja-macros

Wow, primera vez que mencionan dbt en platzi !

Recomendada para todos, es muy intuitiva, sobre todo si tenemos buenas bases en SQL.

Analytics Engineering tomando fuerza en el Modern Data Stack

Un curso de DBT 🙏 please!!!

Los **templates con Jinja** son un mecanismo que permite generar contenido dinámico en aplicaciones y scripts utilizando el motor de plantillas **Jinja2**. Jinja2 es un motor de plantillas para Python ampliamente utilizado en herramientas como **Flask**, **Django**, y también en frameworks como **Apache Airflow** para crear configuraciones y comandos dinámicos. ### **Conceptos básicos** Un **template** es un archivo (generalmente texto o HTML) con marcadores de posición que pueden ser reemplazados dinámicamente por valores. Jinja2 permite utilizar **variables**, **control de flujo** (bucles y condicionales), y **filtros** para construir plantillas complejas. #### **Sintaxis básica** 1. **Variables:**Hola, {{ nombre }}! Esto reemplazará `{{ nombre }}` con el valor de la variable `nombre`. 2. **Control de flujo:** * **Condicionales:**{% if usuario %} Hola, {{ usuario }}! {% else %} Hola, invitado! {% endif %} * **Bucles:**{% for item in lista %} {{ item }} {% endfor %} 3. **Filtros:** Los filtros transforman datos, por ejemplo:{{ texto | upper }} # Convierte el texto a mayúsculas ### **Uso de Jinja en Apache Airflow** En Airflow, Jinja es crucial para construir comandos dinámicos en operadores como `BashOperator`, `PythonOperator`, o incluso configuraciones en tareas y sensores. #### **Ejemplo básico** Generar un archivo con un nombre dinámico basado en la fecha de ejecución: from airflow import DAG from airflow.operators.bash import BashOperator from datetime import datetime with DAG(dag\_id="example\_jinja", start\_date=datetime(2024, 1, 1), schedule\_interval="@daily", catchup=False) as dag: t1 = BashOperator( task\_id="create\_file", bash\_command="echo 'Archivo generado el {{ ds }}' > /tmp/archivo\_{{ ds\_nodash }}.txt" ) * `{{ ds }}`: Representa la fecha de ejecución (por ejemplo, `2024-01-01`). * `{{ ds_nodash }}`: Fecha sin guiones (`20240101`), útil para nombres de archivos. #### **Plantillas personalizadas** Puedes incluir variables adicionales en tus plantillas utilizando el argumento `params`: t1 = BashOperator( task\_id="custom\_file", bash\_command="echo 'Hola, {{ params.nombre }}!' > /tmp/saludo.txt", params={"nombre": "Mario"} ) ### **Plantillas en otros contextos** #### **HTML en aplicaciones web** Jinja es muy usado en frameworks como Flask o Django para generar contenido HTML dinámico. \ \<html> \<head> \<title>Bienvenido\</title> \</head> \<body> \

Hola, {{ usuario }}!\

\

Hoy es {{ fecha | date('d/m/Y') }}.\

\</body> \</html> #### **Configuraciones dinámicas** Jinja puede utilizarse en scripts de configuración, como YAML o JSON, para ajustar valores dinámicamente. app\_name: "{{ name }}" version: "{{ version }}" ### **Filtros útiles en Jinja** * `upper`: Convierte a mayúsculas. * `lower`: Convierte a minúsculas. * `replace`: Reemplaza texto.{{ texto | replace('a', 'o') }} * `default`: Establece un valor predeterminado.{{ variable | default('valor por defecto') }} ### **Ventajas de Jinja** 1. **Flexibilidad**: Permite generar contenido dinámico. 2. **Separación de lógica y presentación**: Útil para aplicaciones web. 3. **Facilidad de uso**: Sintaxis simple y potente.