69 votes

* args, ** kwargs dans les macros jinja2

Comment sont extra args & kwargs traitées pour un Jinja2 macro? La documentation n'est pas exactement clair désinvolte.

Par exemple, c'est clairement faux:

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

qui résultats dans

jinja2.exceptions.TemplateSyntaxError

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

La documentation dit:

kwargs

Comme varargs , mais pour le mot-clé arguments. Tous les non consommées mot-clé arguments sont stockés dans la variable spéciale.

Malheureusement, une zone de liste déroulante supplémentaire mot-clé arguments est une erreur,

{% 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'

Je n'ai pas d'exemples et ne suis pas de définition sur le Jinja2 code source de l'atm. La documentation n'est pas clair pour moi à ce point. Toutes les pensées apprécié.

82voto

Sean Vieira Points 47080

Le truc, c'est qu'il faut accéder à kwargs dans toute macro qui devrait les accepter:

 {# This will not work #}
{% macro example_2(one, two) %}
    * {{one}} - {{two}}
{% endmacro %}
{{example_2(1, 2, test="Hello")}}
 

 {# This will #}
{% macro example_2(one, two) %}
    * {{one}} - {{two}}
    * {{kwargs}}
{% endmacro %}
{{example_2(1, 2, test="Hello")}}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X