2013-05-19 93 views

回答

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

这是你在找什么?

0

这就是我如何克服这个问题:

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

有可能是一个更优雅的方式来实现这一目标,但这个工作对我来说没有过于复杂。如果您希望模板编写器能够以任何顺序指定关键字,则必须使用循环。

但是,这绝对允许你在扩展中使用关键字参数。