web-dev-qa-db-ja.com

* args、** jinja2マクロの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をいじっていません。現時点では、ドキュメントは明確ではありません。どんな考えでも感謝します。

56
blueblank

コツは、kwargsがそれらを受け入れる必要があるすべてのマクロで少なくとも1回アクセスされるである必要があることです。つまり、マクロ本体リストで{{ kwargs }}を1回呼び出す必要がありますマクロ引数リストで宣言せずに{{ 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")}}
63
Sean Vieira