Jinja2扩展了多个关键字参数

时间:2013-05-19 13:27:04

标签: python jinja2 kwargs

我找不到如何将多个命名参数传递给jinja2 Extension。 我想要这样的东西:

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

2 个答案:

答案 0 :(得分:0)

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

这是你在寻找什么?

答案 1 :(得分:0)

这就是我克服这个问题的方法:

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

可能有一种更优雅的方式来实现这一点,但这对我有用而不会过于复杂。如果您希望模板编写者能够以任何顺序指定关键字,那么您将不得不使用循环。

但这肯定允许你在扩展名中使用关键字参数。