2013-07-30 42 views
0

我在Django應用程序中使用了一些模板標籤,併爲不同的標籤/模板使用了相同的功能。如何讓我的Django TemplateTags重複性更低?

美孚標籤去foo_template.html,和噓聲標籤去boo_template.html,例如:

富標籤:

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

噓標籤:

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

哪有我讓我的代碼DRYer?在這種情況下是否有更好的註冊標籤的方法?

+1

[這個答案](http://stackoverflow.com/a/9415589/1628832)應該給你一個想法 – karthikr

+1

的方法似乎是相同的。他們? –

回答

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) 
+0

{%foo「test」%}給我: TemplateSyntaxError at/test/ 無效的塊標記:'foo',預計'elif','else'或'endif' – StaticX

+1

道歉,您需要要顯式傳遞名稱參數,請參閱上面的更新。 –

+0

完美!這就是我想要的! – StaticX