blu*_*ank 56 python macros jinja2
如何为Jinja2宏处理额外的args和kwargs?文档不是很清楚.
例如,这显然是错误的:
{% macro example_1(one, two, **kwargs) %}
do macro stuff
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
结果
jinja2.exceptions.TemplateSyntaxError
TemplateSyntaxError: expected token 'name', got '**'
Run Code Online (Sandbox Code Playgroud)
该文件说:
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'
Run Code Online (Sandbox Code Playgroud)
我没有例子,也没有在Jinja2源代码atm中讨论.此时我不清楚文档.任何想法都赞赏.
Sea*_*ira 64
诀窍是kwargs必须在任何应该接受它们的宏中至少访问一次.也就是说,你必须{{ kwargs }}在宏体中调用一次而不在宏参数列表中声明它.同样如此{{ varargs }}.
这不行
{% macro example_2(one, two) %}
* {{one}} - {{two}}
{% endmacro %}
{{example_2(1, 2, test="Hello")}}
Run Code Online (Sandbox Code Playgroud)
这将
{% macro example_2(one, two) %}
* {{one}} - {{two}}
* {{kwargs}}
{% endmacro %}
{{example_2(1, 2, test="Hello")}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9170 次 |
| 最近记录: |