2015-11-09 104 views
0

我有一個簡單的自定義標籤,將返回的對象Django的自定義標籤reusablity

@register.simple_tag 
def get_languages(obj): 
    return obj.get_languages() 

的名單有什麼辦法使得我的模板,我可以保存自定義標籤的結果,這樣我可以重用它在其他地方在我的HTML?

{% get_languages project as used_languages %} 
<span class="tag">{{ used_languages.0.name }}</span> 
<span class="tag">{{ used_languages.1.name }}</span> 
<span class="tag">{{ used_languages.2.name }}</span> 
+1

你的意思是說你只想在第一次使用標籤時調用obj.get_languages(),並且後續的調用要使用存儲的結果嗎? – Sebastian

+0

是的,這正是我需要的。 – Algorithmatic

回答

1

下面是memoize的你的標籤一個簡單的方法:

get_languages_cache = None 

@register.simple_tag 
def get_languages(obj): 
    if get_languages_cache is None: 
     get_languages_cache = obj.get_languages() 
    return get_languages_cache 

這是假設obj.get_languages()永遠不會返回None。查詢this question以獲得進一步的討論和Python中memoization的例子。