关键字参数

jinja2 使用 Python 的关键字参数,支持函数,过滤器和宏。Nunjucks 会通过一个调用转换 (calling convention) 来支持。

关键字参数如下:

  1. {{ foo(1, 2, bar=3, baz=4) }}

barbaz 为关键字参数,Nunjucks 将他们转换成一个对象作为最后一个参数传入,等价于 javascript 的如下调用:

  1. foo(1, 2, { bar: 3, baz: 4})

因为这使一个标准的调用转换,所以适用于所有的符合预期的函数和过滤器。查看 API 章节获得更多信息。

定义宏的时候也可以使用关键字参数,定义参数值时可设置默认值。Nunjucks 会自动将关键字参数与宏里定义的值做匹配。

  1. {% macro foo(x, y, z=5, w=6) %}
  2. {{ x }}, {{ y }}, {{ z }}, {{ w}}
  3. {% endmacro %}
  4. {{ foo(1, 2) }} -> 1, 2, 5, 6
  5. {{ foo(1, 2, w=10) }} -> 1, 2, 5, 10

在宏中还可以混合使用位置参数 (positional arguments) 和关键字参数。如示例,你可以将位置参数用作关键字参数:

  1. {{ foo(20, y=21) }} -> 20, 21, 5, 6

你还可以用位置参数来替换关键字参数:

  1. {{ foo(5, 6, 7, 8) }} -> 5, 6, 7, 8

如下示例,你可以跳过 ("skip") 位置参数:

  1. {{ foo(8, z=7) }} -> 8, , 7, 6