Python 渲染的模板将变成字符串
我试图使用jinja模板将xcom中的一些json解析到字典中。下面请注意,Python 渲染的模板将变成字符串,python,jinja2,airflow,Python,Jinja2,Airflow,我试图使用jinja模板将xcom中的一些json解析到字典中。下面请注意,运算符和模板化_字段是伪代码 def xcom_from_json(xcom): xcom_loaded = json.loads(xcom) logging.info(pformat(f'xcom loaded: {xcom_loaded}', indent=3)) return xcom_loaded PythonOperator(python_callable=some_callable,
运算符
和模板化_字段
是伪代码
def xcom_from_json(xcom):
xcom_loaded = json.loads(xcom)
logging.info(pformat(f'xcom loaded: {xcom_loaded}', indent=3))
return xcom_loaded
PythonOperator(python_callable=some_callable,
op_args=[f'{{{{ (ti.xcom_pull("{task_id}") | xcom_from_json)["data"]["stats"] }}}}'])
上述方法几乎奏效。在
some_callable
方法中,我得到了解析的jinja,但它是一个字符串化的dict,而不是一个原始dict。这没有意义,因为您可以在jinja模板中看到结构作为dict被遍历。jinja是否将模板中的所有内容字符串化?如果是,有没有办法不这样做?呈现的jinja模板总是会返回字符串。您可以改为从python方法中获取XCom值
def some_callable(task_id, **context):
stats = json.loads(context['ti'].xcom_pull(task_id)['data']['stats'])
PythonOperator(
...
python_callable=some_callable,
op_args=[f'{task_id}'],
provide_context=True)
请注意,您必须提供上下文,这使python方法具有与jinja模板相同的值访问权限