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をいじっていません。現時点では、ドキュメントは明確ではありません。どんな考えでも感謝します。
コツは、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")}}