如何让我的Django TemplateTags重复性降低?

时间:2013-07-30 18:33:10

标签: django templates dry django-templates

我在Django应用程序中有一些模板标签,它们具有相同的功能,适用于不同的标签/模板。

Foo标签转到foo_template.html,boo标签转到boo_template.html,例如:

Foo标签:

@register.inclusion_tag('foo_template.html', takes_context=True)
def foo(context, something):    
    sometng = something
    return {'something': sometng}

Boo标签:

@register.inclusion_tag('boo_template.html', takes_context=True)
def boo(context, something):    
    sometng = something
    return {'something': sometng}

如何让我的代码DRYer?在这种情况下,有更好的方法来注册标签吗?

1 个答案:

答案 0 :(得分:0)

请记住,装饰器只是包装函数的语法糖,它将原始函数作为参数。所以你可以保留你的上下文函数未修饰,然后定义两个包装器:

def common(context, something):    
    sometng = something
    return {'something': sometng}

register.inclusion_tag('foo_template.html', takes_context=True, name='foo')(common)
register.inclusion_tag('boo_template.html', takes_context=True, name='bar')(common)