* args,** jinja2宏中的kwargs

时间:2012-12-19 02:35:51

标签: python macros jinja2

如何额外的args& kwargs处理了Jinja2宏?文档并不完全清楚。

例如,这显然是错误的:

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

导致

jinja2.exceptions.TemplateSyntaxError

TemplateSyntaxError: expected token 'name', got '**'

documentation说:

  

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中讨论。此时我不清楚文档。任何想法都赞赏。

1 个答案:

答案 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")}}