* args,** kwargs在jinja2macros

Jinja2macros如何处理额外的参数和kwargs? 文件不是完全清楚的。

例如,这显然是错误的:

{% macro example_1(one, two, **kwargs) %} do macro stuff {% endmacro %} 

这导致了

 jinja2.exceptions.TemplateSyntaxError TemplateSyntaxError: expected token 'name', got '**' 

该文件说:

kwargs

可变参数,但关键字参数。 所有未使用的关键字参数都存储在这个特殊variables中。

不幸的是,任何额外的关键字参数组合是一个错误,

 {% macro example_2(one, two) %} do macro stuff {% endmacro %} {{ example_2(one, two, test='test') }} TypeError: macro 'example_2' takes no keyword keyword argument 'test' 

我没有任何例子,也没有在Jinja2的源代码atm中大肆渲染。 目前我的文档还不清楚。 任何想法赞赏。

诀窍是kwargs必须在任何接受它们的macros中至less访问一次 。 也就是说,你必须在macros体中调用{{ kwargs }}一次, 而不必在macros参数列表中声明它。 {{ varargs }}也是如此。

这是行不通的

 {% macro example_2(one, two) %} * {{one}} - {{two}} {% endmacro %} {{example_2(1, 2, test="Hello")}} 

这会

 {% macro example_2(one, two) %} * {{one}} - {{two}} * {{kwargs}} {% endmacro %} {{example_2(1, 2, test="Hello")}}