0

我试图编写一个能够进行各种计算并返回最终结果的宏。

宏是否只接受块级代码,如 if 或 for 循环?而不是一组单独的陈述?

请在这件事上给予我帮助

谢谢

4

1 回答 1

0

你可以用宏做很多事情。大多数本机 Python 操作都是可能的,尽管是以一种笨拙的非 Python 方式(这里没有列表推导)。

例如,可以调用 python 内置数据类型的任何方法:

{% set my_base_models = [] %}

{% for i in graph.nodes.values() %}

   {% if i["name"].startswith('base_model') %}
       
        {% do my_list.append(i) %}

    {% endif %}

{% endfor %}

关键点:

  1. 调用{% do <obj>.<method>() %}任何改变状态的方法(例如pop(),,append()等)来执行它
  2. 将结果放入变量中{% set <var> = <expression> %}
  3. 查看标准 jinja 中的过滤器和测试以过滤和测试映射(字典)和列表
  4. 查看 dbt 特定jinja 上下文变量和方法的列表
于 2020-12-07T15:29:41.253 回答