我找不到如何将多个命名参数传递给 jinja2 扩展。我想要这样的东西:
{% some_extension foo='foo' bar='bar' %}
data
{% end_someextension %}
我找不到如何将多个命名参数传递给 jinja2 扩展。我想要这样的东西:
{% some_extension foo='foo' bar='bar' %}
data
{% end_someextension %}
这就是我克服这个问题的方法:
{% 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)
可能有一种更优雅的方式来实现这一点,但这对我有用,但不会过于复杂。如果您希望模板编写器能够以任何顺序指定关键字,则必须使用循环。
但这绝对允许您在扩展中使用关键字参数。
{% macro some_extension(foo='foo', bar="bar") %}
{{ foo }}, {{bar}}
{% endmacro %}
这是你想要的??