Множественные аргументы ключевого слова Jinja2

Я не могу найти, как передать несколько именованных аргументов в jinja2 Extension. Я хочу что-то вроде этого:

{% some_extension foo='foo' bar='bar' %} data {% end_someextension %} 

 {% macro some_extension(foo='foo', bar="bar") %} {{ foo }}, {{bar}} {% endmacro %} 

Это то, что вы ищите??

Вот как я преодолел эту проблему:

 {% exttag 'main', scope='global', auto='root' %}{% endexttag %} 

Метод анализа:

 def parse(self, parser): lineno = parser.stream.__next__().lineno context = nodes.ContextReference() key = parser.parse_expression() parser.stream.skip_if('comma') if parser.stream.skip_if('name:scope'): parser.stream.skip(1) scope = parser.parse_expression() else: scope = nodes.Const('page') parser.stream.skip_if('comma') if parser.stream.skip_if('name:auto'): parser.stream.skip(1) auto = parser.parse_expression() else: auto = nodes.Const(None) args = [key,scope,auto,context] body = parser.parse_statements(['name:endexttag'], drop_needle=True) return nodes.CallBlock(self.call_method('_render_block', args), [], [], body).set_lineno(lineno) 

Там может быть более элегантный способ добиться этого, но это сработало для меня, не будучи слишком сложным. Если вы хотите, чтобы создатель шаблона мог указать ключевые слова в любом порядке, вам придется использовать цикл.

Но это определенно позволяет использовать аргументы ключевых слов в расширении.