You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Airflow变量传递值?Jinja模板渲染失败问题排查

解决Airflow Variable中Jinja模板未渲染的问题

问题核心

直接调用Variable.get()不会自动解析Jinja模板标签,且若你的advertiser_id等是本地Python变量而非Airflow全局变量,模板里的{{ var.* }}写法本身就不匹配变量来源。

解决方案分两种场景:

场景1:advertiser_id等是Airflow全局变量

如果这些值已经存在于Airflow Variables中,只需在获取变量时开启模板渲染:

payload_variable_string = Variable.get("payload_keyword", render_template=True)
logging.info(payload_variable_string)

此时Airflow Variable里的模板保持{{ var.advertiser_id }}写法即可,开启render_template=True后,Airflow会自动替换对应的全局变量值。

场景2:advertiser_id等是Python本地变量(你的情况)

因为你提到这些变量是在API调用方法中声明的本地变量,需要手动用Jinja2渲染模板:

  1. 调整Airflow Variable中的模板:去掉var.前缀,直接使用本地变量名:
{
    "advertiserId": "{{ advertiser_id }}",
    "startDate": "{{ start_date }}",
    "endDate": "{{ end_date }}",
    "reportType": "reportType",
    "reportMetrics": [
        // 你的指标列表
    ]
}
  1. 在代码中手动渲染模板:
from jinja2 import Template
import json
from airflow.models import Variable
import logging

# 本地声明的变量
advertiser_id = '24883'
start_date = '2023-02-01'
end_date = '2023-02-10'

# 获取Airflow中存储的模板字符串
payload_template = Variable.get("payload_keyword")

# 用本地变量渲染模板
rendered_payload_str = Template(payload_template).render(
    advertiser_id=advertiser_id,
    start_date=start_date,
    end_date=end_date
)

# 转换为JSON对象(用于API POST请求)
payload = json.loads(rendered_payload_str)
logging.info(payload)

为什么原来的方法失效?

  • Variable.get()默认参数render_template=False,不会触发Jinja模板解析;
  • 模板中的{{ var.advertiser_id }}是引用Airflow全局变量的语法,和你代码里的本地变量不是同一个对象,即使开启渲染也无法匹配到本地值。

内容的提问来源于stack exchange,提问作者shri-nik-8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:43:44