如何额外的args& kwargs处理了Jinja2宏?文档并不完全清楚。
例如,这显然是错误的:
{% macro example_1(one, two, **kwargs) %}
do macro stuff
{% endmacro %}
导致
jinja2.exceptions.TemplateSyntaxError
TemplateSyntaxError: expected token 'name', got '**'
kwargs
与 varargs 类似,但是对于关键字参数。所有未使用的关键字参数都存储在此特殊变量中。
不幸的是,任何额外关键字参数的组合都是错误,
{% 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中讨论。此时我不清楚文档。任何想法都赞赏。
答案 0 :(得分:62)
诀窍是kwargs
必须在任何应该接受它们的宏中至少访问 。也就是说,你必须在宏体中调用{{ kwargs }}
一次,而不用在宏参数列表中声明它。 {{ 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")}}