3
我无法找到如何将多个命名参数传递给jinja2扩展。 我想这样的事情:Jinja2扩展多个关键字参数
{% some_extension foo='foo' bar='bar' %}
data
{% end_someextension %}
我无法找到如何将多个命名参数传递给jinja2扩展。 我想这样的事情:Jinja2扩展多个关键字参数
{% 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 %}
Parse方法:
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)
有可能是一个更优雅的方式来实现这一目标,但这个工作对我来说没有过于复杂。如果您希望模板编写器能够以任何顺序指定关键字,则必须使用循环。
但是,这绝对允许你在扩展中使用关键字参数。