2013-05-19 83 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) 

有可能是一個更優雅的方式來實現這一目標,但這個工作對我來說沒有過於複雜。如果您希望模板編寫器能夠以任何順序指定關鍵字,則必須使用循環。

但是,這絕對允許你在擴展中使用關鍵字參數。