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)
有可能是一個更優雅的方式來實現這一目標,但這個工作對我來說沒有過於複雜。如果您希望模板編寫器能夠以任何順序指定關鍵字,則必須使用循環。
但是,這絕對允許你在擴展中使用關鍵字參數。