Airflow 中的 Jinja 模板总是将值更改为字符串

Jinja template in Airflow always change value to String

我在 Airflow 中有一个自定义的运算符 my_previous_job,returns 一个 Python 列表。

在我的 DAG 定义中,我使用 jinja 模板引用它:

t_my_job = MyOperator(
    data=json.dumps({
        "jobId": f"{{{{ ti.xcom_pull(task_ids='my_previous_job', "f"key='return_value')}}}}",
    })
)

然而,f"{{{{ (ti.xcom_pull(task_ids='my_previous_job', "f"key='return_value')}}}})" returns 的值不是一个列表,而是一个包含列表的字符串。即

而不是:

      ['a','b','c']

它returns一个字符串:

      "['a','b','c']"

我该怎么做才能获得由 my_previous_job 而不是字符串生成的列表?

对于 Airflow < 2.1.0:呈现模板化字段始终为字符串。

对于 Airflow >= 2.1.0: 支持将字段渲染为原生 Python 对象。 您需要在 DAG 对象中设置 render_template_as_native_obj=True。 您可以在 docs.

中阅读更多相关信息