Python *args,**kwargs在jinja2宏中
如何处理Jinja2宏的额外args和kwargs?文档不是很清楚 例如,这显然是错误的:Python *args,**kwargs在jinja2宏中,python,macros,jinja2,Python,Macros,Jinja2,如何处理Jinja2宏的额外args和kwargs?文档不是很清楚 例如,这显然是错误的: {% macro example_1(one, two, **kwargs) %} do macro stuff {% endmacro %} 导致 jinja2.exceptions.TemplateSyntaxError TemplateSyntaxError: expected token 'name', got '**' 报告说: 夸尔斯 与varargs类似,但用于关键字参数。所有
{% macro example_1(one, two, **kwargs) %}
do macro stuff
{% endmacro %}
导致
jinja2.exceptions.TemplateSyntaxError
TemplateSyntaxError: expected token 'name', got '**'
报告说:
夸尔斯
与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
必须至少被访问一次。也就是说,您必须在宏体中调用一次{{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")}}
听起来它可能不支持任意关键字参数。也许例如,
{%macro example_2(一,二,test=None)%}
或类似的?哇,这是一个非常令人厌恶的设计选择。@BrenBarn-我不得不同意你的看法-Jinja中有很多很棒的东西-神奇的伪球形不属于这一类。我不会说这是很棒的,但至少我们可以把它放在一个注释中,在渲染时去掉它。{{{kwargs}}
注释方法对我不起作用。可能是版本特定的。你是说我应该写{%if False%}{{kwargs}{%endif%}
还是泰勒写的版本?哦